Java中的异常及其使用

一、异常

1.什么是异常

程序执行过程中发生了不正常的情况,而这种不正常的情况叫做异常。

运行阶段的异常大体分为两种:编译时异常和运行时异常,我主要介绍的是编译时异常。

译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错

2.异常发生原理

所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。所以异常发生就是new异常对象

3.Java对异常的处理的两种方式

第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。
第二种方式:使用try . .catch语句进行异常的捕捉。

1)第一种方式:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续
向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。

2)采用捕捉的方法会发生以下三种情况:

2.1 try结构中的代码不会产生异常,那么catch结构的代码就不会执行;
2.2 try结构中的代码产生了异常,并且catch结构的代码能够处理这个异常,那么catch处理完异常后,程序继续往下执行
2.3 try结构中的代码产生了异常,但是catch结构的代码不能处理这个异常,程序就会被中断

4.catch语句

1)catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。
2)catch可以写多个。使用catch的时候,一个一个处理。这样有利于程序的调试。
3)catch写多个的时候,从上到下,必须遵守范围从小到大。

5.finally语句

1)在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常。finally子句必须和try一起出现,不能单独编写。

2)finally语句通常使用在哪些情况下呢?
通常在finally语句块中完成资源的释放/关闭。因为finally中的代码比较有保障。
即使try语句块中的代码出现异常,finally中代码也会正常执行。

3)finally语句块中的代码唯一不执行的情况是在前面的try结构或者catch结构中存在退出系统的语句System.exit(1)。

注意:当进行捕捉时出现return语句,执行顺序是先try再catch,然后执行finally最后执行return。

6.throw和throws的比较

throw                                                            throws
生成并抛出异常                                           声明方法内抛出了异常
位于方法体内部,可作为单独语句使用       必须跟在方法参数列表后面,不能单独使用
抛出一个异常对象,且只能是一个              声明抛出异常类型,可以跟多个异常

二、自定义异常

2.1首先自定义异常名称为addException使其继承Exception,然后为其添加有参构造方法与无参构造方法

public class AddException extends Exception{
    public AddException() {
    }

    public AddException(String s) {
        super(s);
    }
}

2.2在需要使用异常的地方抛出这个异常

public void print() throws AddException {
        int nums[] = {1,2,3,4};
        for(int i = 0;i< nums.length;i++){
            System.out.println(nums[i]);
        }
        // 手动抛出异常
        throw new AddException("数组已经输出完毕,无法继续输出");
    }

2.3调用该方法,进行异常处理

public static void main(String[] args) {
        ExceptionTest02 e = new ExceptionTest02();
        // 捕捉异常
        try {
            e.print();
        } catch (AddException ex) {
            System.out.println(ex.getMessage());// 打印异常信息
        }
    }

三、final、finally、finalize比较

1)final关键字
final修饰的类无法继承
final修饰的方法无法覆盖
final修饰的变量不能重新赋值。
2)finally关键字
和try一起联合使用。
finally语句块中的代码是必须执行的。
3)finalize标识符
是一个object类中的方法名。
这个方法是由垃圾回收器Gc负责调用的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值