Java异常处理

1.异常:程序执行过程中发生了不正常的情况,而这种不正常的情况被称为异常。

 

   java语言提供了异常的处理方式,当程序执行过程中出现了不正常情况,java把该信息打印输出到控制台,供程序员参考。程序员看到异常信息之后,可以对程序进行修改,让程序更加的健壮

   异常信息是由JVM打印出来的,异常发生时JVM会自己new一个异常对象,然后打印异常信息到控制台。

2.异常在java中以类的形式存在,每一个异常类都可以创建异常对象。

3.异常的继承层次结构

        所有的异常类的基类也是Object;Object下有Throwable(可抛出的);Throwable下有两个分

      支Error(不可处理,直接退出JVM,如IOError、StackOverflowError等)和Exception(可处理

      的);Exception下有两个分支Exception的直接子类(编译时异常、受检/受控异常,要求程序员

      在编写程序阶段必须先对这些异常进行处理)和RuntimeException(运行时异常、非受检/受控

      异常,在程序编写阶段可以预先处理,也可以不处理,如NullPointerException、

      ClassCastException等异常)。

        注意:编译时异常和运行时异常都是发生在运行阶段的,因为只有程序运行阶段才会new对

      象,而异常的发生就是new了一个异常对象。编译时异常的得名原因是因为编译时异常必须在

      编译(编写)阶段预先处理,如果不处理编译器报错。

        编译时异常的发生概率较高,需要在运行之前对其进行预处理;运行时异常的发生概率较

      低,在运行之间可以进行预处理也可以不进行预处理。

4.java中对异常的两种处理方式

        ①在方法声明的位置上,使用throws关键字抛给上一级,调用者来处理这个异常。如果

          java中异常发生后一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者

          JVM,JVM知道这个异常发生,只有一个结果,终止java程序的执行。throws后面可以写多

          个异常,异常之间用逗号隔开。

                ClassNotFoundException异常是编译时异常,需要预先处理,不然编译器报错。        

        ②使用try...catch语句进行异常的捕捉。一般main方法中的异常建议使用try...catch进行捕

          捉,不要继续上抛了。catch后面的小括号的类型可以实具体的异常类型,也可以是该异常

          类型的父类型(多态)。catch代码块可以写多个,建议发生多个编译时异常时精确地一个一个

          处理(如果有继承关系,要先处理子类型,再处理父类,否则会报错),这样有利于程序的调

          试。

        在JDK8之后,有一种或|的新写法:

        ③关于两种方法的选择:如果希望调用者来处理,即希望调用者看到这种异常,就选择

          throws上报,其他情况都使用捕捉的方式。

5.注意:只要异常没有被捕捉,采用上抛的方式,如果出现了异常,调用此方法后的后续代码就不会执行,该方法结束。如果用try...catch语句进行了捕捉,在try语句块中的某一行代码出现异常,该行后面的代码就不会执行,而去执行catch语句块中的代码,异常被捕捉后,调用此方法后的后续代码就可以继续执行。

6.异常对象的两个重要方法

        ①获取异常简单的描述信息:

                String msg = exception.getMessage();

        ②打印异常追踪的堆栈信息:java后台打印异常堆栈追踪信息的时候,采用了异步线程的方式

          打印的。异常的追踪信息从上往下一行行看,SUN写的代码就不需要看了,主要的问题是出

          现在自己编写的代码上。

                exception.printStackTrace();

7.关于try...catch中的finally子句

        ①在finall子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了

          异常,也会执行。

        ②finally子句必须和try一起出现,不能单独编写。

        ③通常在finally语句块中完成资源的释放和关闭,因为finally中的代码比较有保障,即时try语

          句块中的代码出现异常,finally中代码也会正常执行。

        ④可以没有catch语句块。

        ⑤如果try语句块中有return语句,也会先执行finally语句块中的代码,再执行return语句。 

        ⑥如果在try语句块中写了退出JVM语句,finally语句块中的代码就不会执行了。

   一道关于finally的题目:return语句出现在i = 100的下面,所以返回结果必须是100。

  

         利用反编译工具查看反编译后的代码即可明白。

8. java中自定义异常

   定义步骤

        ①编写一个类继承Exception(创建编译时异常)或者RuntimeException(创建运行时异常);

        ②提供两个构造方法,一个无参数的一个带有String参数的

   手动抛出异常:使用关键字throw

        throw 异常对象; 

        一般手动抛出异常的部位,在解决该异常时都选择利用throws抛给调用者,因为自己捕捉自

      己没有意义,使用调用者来进行捕捉。

9.总结异常中的关键字

        ①异常捕捉:

                try

                catch

                finally

        ②throws:在方法声明位置上使用,表示上报异常信息给调用者。

            throw:手动抛出异常。 

PS:根据动力节点课程整理,如有侵权,联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值