一,Java异常:

本文介绍了Java中的异常处理,包括Throwable类下的Error和Exception,以及编译期异常和运行时异常的区别。异常的产生通常通过`throw`关键字,处理方式有`throws`声明或`try-catch`捕获。`finally`块确保特定代码的执行。文章还提到了自定义异常的创建过程,并强调了异常处理的最佳实践。
摘要由CSDN通过智能技术生成

一,异常:

就是程序出现不正常的情况

1.1,分类:

在Java程序设计中,关于异常有一大类,叫做Throwable,其下又有两个分类:Error,Exception

Error:程序出现的严重问题,且只能抛出(throw),不能试图捕获(try catch)

Exception:是程序出现的问题,可以捕获可以抛出

编译期异常又叫受检查异常,运行时异常又叫不受检查异常

1.2,异常的产生:

在代码内部使用 throw 异常对象,来产生异常

throw new ParseException()

1.3,编译期异常和运行时异常:

运行时异常:代码执行时可能会出错,程序中出现运行时异常没有强制处理,默认采取抛出异常

编译期异常:代码编译时可能会出错,程序中出现编译期异常,就会强制要求处理

运行时异常:

ArithmeticException 算术异常
ArrayIndexOutOfBoundsException 数组下标越界异常
NullPointerException 空指针异常
ClassCastException 类转换异常
StringIndexOutOfBoundsException 字符串下标越界
NumberFormatException 数字格式化错误

编译时异常

ParseException 解析异常

throwthrows
位置类内方法后
后面对象异常类
作用产生异常声明异常
1.4,异常处理:

异常的处理只有两种方案:

1,抛出(throws)

抛出是将异常在方法签名上声明抛出

public void test () throws 异常类名{

}

在方法参数列表后,使用throws加异常类名来声明抛出异常,且允许声明多个异常类,中间用逗号隔开,谁调用这个方法,异常就抛给谁,调用者就要继续处理异常。抛出异常后,异常处后续代码不再执行

2.1,试图捕获(try catch):
try{
//可能会出现异常的代码
}catch(一异常类名 e){
e.XXX();
}
try里面包裹代码,如果其中代码出现异常,就会被catch抓住,需要抛出异常和catch后声明的异常同类型才可以抓住,否则抓不住,如果try里面的代码没有任何报错,catch内的代码不执行
    catch还可以同时声明多个异常类,特别强调不是同时抓多个异常对象,因为根本就不可能产生多个异常对象,因为try内部一旦出现异常,try后面的内容不执行了
      try {
            System.out.println(1 / 0);
            int[] arr = {1};
            System.out.println(arr[1]);
        } catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
            System.out.println("数组越界");
        } catch (ArithmeticException ae){
            ae.printStackTrace();
            System.out.println("算术异常");
        }
    虽然可以同时声明多个异常类,但是很麻烦,一般可以直接写一个最大异常类Exception
        try {
            System.out.println(1 / 0);
            int[] arr = {1};
            System.out.println(arr[1]);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("程序出错");
        }
//try...catch结构后的代码不影响,继续执行
       System.out.println("11111);  

    }

抛出:抛出异常后,异常处后续代码不再执行
捕获:无论try...catch代码有没有错误,其结构后面的代码能执行
2.2 finally:
try{
//...
} catch(Exception e){
//...
} finally{
//...
}
或者
    try{
        //...
    } finally{
        //...
    }
finally这么设计的作用:为了确保某些代码必须能够执行到,一般用于释放资源
2.3异常的应用:

应用1,设计方法时,如果这个方法会多次调用,或者被多次多层调用,尽量自行捕获异常,不要抛出,因为一旦抛出,所有使用者都需要处理该异常

应用2,方法重写时子类抛出的异常范围小于等于父类的异常范围,父类方法没有异常,子类重写时也不能抛出异常

2.4异常的API:

最大父类Throwable

构造方法
Throwable(String message) 
    message就是异常信息
    构造带指定详细消息的新throwable
String getMessage() 
    返回此throwable的详细消息字符串 
void printStackTrace() 
    将异常信息打印
    将此throwable及其追踪输出至标准错误流 

二,自定义异常:

自定义异常需要继承Throwable类,一般继承的是Throwable的子类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw语句抛出,继承RuntimeException那就是运行时异常的特点,继承非RuntimeException及其子类那就是编译期异常的特点

1,建类,2,继承,3,写构造方法,4,在方法内部使用异常(产生异常),5,测试

三,总结:

关于异常,以后常见的是Exception,Error基本见不到(除非问题非常严重),需要分清楚编译期异常有哪些,运行时异常有哪些,要分清楚,捕获异常,抛出异常有什么特点

自定义异常在后续写项目会用到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值