您现在的位置是:首页 > 正文

Java之异常

2023-10-18 14:34:06阅读 3008

在这里插入图片描述

作者简介: zoro-1,目前大二,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

认识异常

异常是指程序运行时发生的错误或意外情况,它可能导致程序无法继续执行或产生不正确的结果。在编程中,异常通常是由于输入数据错误、计算错误、系统故障或资源不足等原因引起的。程序员可以在代码中使用异常处理机制来捕获和处理这些异常,从而避免程序崩溃或产生不恰当的结果。常见的异常包括空指针异常、数组越界异常、算术异常等。

异常的体系结构

在这里插入图片描述
在这里插入图片描述

异常的处理

防御式处理

错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿. 主要的方式
1.事前防御型:

boolean ret = false;

ret = 登陆游戏();

if (!ret) {
 处理登陆游戏错误;
    return;
}

ret = 开始匹配();

if (!ret) {
 处理匹配错误;
    return;
}

ret = 游戏确认();

if (!ret) {
 处理游戏确认错误;
    return;
}

ret = 选择英雄();

if (!ret) {
    处理选择英雄错误;
    return;
}

ret = 载入游戏画面();

if (!ret) {
 处理载入游戏错误;
    return;
}
......

2.事后处理型

try {
    登陆游戏();
    开始匹配();
    游戏确认();
    选择英雄();
    载入游戏画面();
   ...
} catch (登陆游戏异常) {
    处理登陆游戏异常;
} catch (开始匹配异常) {
 处理开始匹配异常;
} catch (游戏确认异常) {
 处理游戏确认异常;
} catch (选择英雄异常) {
 处理选择英雄异常;
} catch (载入游戏画面异常) {
 处理载入游戏画面异常;
}

异常的抛出

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:

throw new XXXException("异常产生的原因");

【需求】:实现一个获取数组中任意位置元素的方法。

public static int getElement(int[] array, int index){
    if(null == array){
         throw new NullPointerException("传递的数组为null");
         }
        
    if(index < 0 || index >= array.length){
        throw new ArrayIndexOutOfBoundsException("传递的数组下标越界");
   }
    
    return array[index];
}
 

public static void main(String[] args) {
    int[] array = {1,2,3};
    getElement(array, 3);
}

在这里插入图片描述

异常的捕获及处理(try-catch-finally)

在这里插入图片描述

fianlly讲解

一般是用来关闭资源,为什么不在程序最后关闭资源呢,因为fianlly里语句一定会被执行且在return语句前,而程序最后之前的try语句如果return,那程序最后就不能关闭资源了,但fianlly语句中最好不要用return语句,因为try里面有return语句的话,fianlly里面就会执行,那try里面的return就没意义了

编译时异常(受查异常)

编译时异常是指在编译程序时就可以检测到的异常,也称为受检异常。如果程序中没有对这些异常进行处理,编译器会报错,无法编译通过

几个编译时异常:

  1. FileNotFoundException(文件未找到异常):在读取文件时,如果文件不存在,就会抛出该异常。

  2. IOException(输入输出异常):在进行输入输出操作时,如果操作失败,则会发生该异常。

  3. SQLException(SQL异常):在进行数据库操作时,如果SQL语句有误或者连接数据库失败,就会抛出该异常。

  4. ClassNotFoundException(类未找到异常):在加载类时,如果找不到指定的类,就会发生该异常。

这些异常都需要在代码中进行处理,否则编译器就会报错,无法编译通过。通常,我们会使用try-catch语句来捕获并处理这些异常。

运行时异常

运行时异常(RuntimeException)指的是在程序执行期间发生的异常,它们不需要在代码中显式地处理或声明。这些异常通常是由程序的错误逻辑或代码错误引起的,例如空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)和类转换异常(ClassCastException)等。

下面给出几个例子:

  1. NullPointerException
String str = null;
System.out.println(str.length());
  1. ArrayIndexOutOfBoundsException
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
  1. ArithmeticException
int a = 10;
int b = 0;
System.out.println(a / b);
  1. ClassCastException
Object obj = "hello";
Integer num = (Integer) obj;

自定义异常

继承Exception,必须要处理或声明

public class Text8 {
    public static void main(String[] args) {
        try {
            throw new My_E("编译时自定义异常");
        } catch (My_E e) {

        }
    }
}
class My_E extends Exception{
   public My_E(String str){
       super(str);
   }

}

运行时异常

继承RuntimeException,不需要处理

public class Text8 {
    public static void main(String[] args) {
            throw new My_Run("运行时自定义异常");
    }
}
class My_Run extends RuntimeException{
   public My_Run(String str){
       super(str);
   }

}

今天的分享到这就结束了,记得三连哦,谢谢大家支持
在这里插入图片描述

网站文章