java中exception作用_java中的异常Exception的划分,以及他们的特性。

1、异常分为编译时异常(ExceptionSubclass)和运行时异常(RuntimeException):

f5fba5fc3ab5

f5fba5fc3ab5

2、编译时异常的发生概率高,而运行时异常的发生概率比较低,因此编译时在编写代码时应该处理,而运行时异常可以在编写代码时不处理,系统会自动对其进行处理。所有的异常都是发生在运行期。

java语言对异常处理的两种方式:1、在方法声明时使用throw关键字,抛给上一级。

2、使用try........catch语句进行异常的捕捉。

f5fba5fc3ab5

这里的异常是ArithmeticException,被底层默认抛给上一层,然后抛给了JVM,导致程序被终止了。

f5fba5fc3ab5

3、如何使用throws进行异常的处理:

以下代码为什么会报错?因为dosome()方法throws了ClassNotFoundException异常,而ClassNotFoundException异常是编译时异常的子类,因此必须在代码阶段进行处理。但是在方法调用的时候没有编写代码进行处理,如果没有处理,那么编译器报错。

f5fba5fc3ab5

4、如何使用try......................catch捕捉异常

当每一方法遇到异常时有两种选择:第一种在程序声明时加一个throws异常,将异常返回给上一级调用方法,

如果异常逐级上抛到JVM都没有得到解决,那么程序将会被JVM强行

终止运行的

第二种在程序体中加入try................catch语句将要调用的函数

放入try语句内,这样就可以将将异常解决。

f5fba5fc3ab5

5、注意手动在程序中抛异常时,关键字是throw而不是throws。手动抛异常得语法格式是:throw new 异常名("想要告诉使用者的字符串");而且抛异常的时候可以一次抛出多个异常。一个方法在调用的时候出现异常,那么这个方法后面的程序就不再会执行。

f5fba5fc3ab5

注意:什么时候用throws什么时候用try.................catch?

f5fba5fc3ab5

6、深入try..............catch

f5fba5fc3ab5

当调用程序时,如果某个方法出现异常,那么这个方法后面的程序就不会再执行,而如果这个方法的异常被catch后,这个方法后面的程序就可以继续执行。

1、catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型

f5fba5fc3ab5

2、catch可以写多个,建议catch的时候,精确地一个一个处理,这样有利于程序的调试

f5fba5fc3ab5

3、catch可以写多个时候,必须遵守从上到下,且从小到大,也就是子类在上,父类在下,否则会报错。(下图的方法会报错,因为不是从上到下的)

f5fba5fc3ab5

注意:jdk8以后可以将几个异常的捕捉合起来写成|分割的形式。

f5fba5fc3ab5

7、在异常处理中两个比较重要的方法:

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

String mes=exception.getmessage();其中exception是异常的名字。输出的东西就是异常

在创建时输入的字符串。

2、打印异常追踪的堆栈信息:

exception.printStackTrace();其中exception是异常的名字。输出的东西是出现异常的具体位置。

f5fba5fc3ab5

f5fba5fc3ab5

输出的结果:

f5fba5fc3ab5

8、如何通过程序的异常信息来判断程序哪里出的错

f5fba5fc3ab5

9、finally子句

1、作用是即使try中间出现异常,也能保证finally子句中的程序继续执行,这样就保证了一些必须要执行的成序必须要执行。

f5fba5fc3ab5

2、 那么什么时候使用finally呢?

下图中当出现空指针异常时,异常被捕捉,导致直接执行catch(NullPointerException e),然后执行后面的语句,导致fis.close()语句没有被执行。这样就导致程序出现了问题。此时finally能够很好的解决问题。

f5fba5fc3ab5

3、 如下图就是加入finally的代码,这样就保证了fis.close()的运行,这样整个程序就可以正常运行了。

从这里我们可以看出:finally子句一般用于资源的释放和关闭

finally中的代码比较有保障

即使try语句出现异常,finally中的代码也可以顺利执行。

f5fba5fc3ab5

10、try和finally联用没有catch的情况

没有catch程序还是会执行,只是try执行时,会先跳过return然后执行finally中的语句,执行完以后再执行return语句。也就是说放在finally语句中的代码是一定会执行的。

f5fba5fc3ab5

只有一种情况可以阻止finally中的语句执行,那就是退出jvm语句System.exit(0);。

f5fba5fc3ab5

注意一种特殊的情况:

下图的return i的返回值是100而不是101,具体原因注释已经解释了。但是可以看一下下一张图的反编译的代码就能明白了。

f5fba5fc3ab5

反编译的结果:

f5fba5fc3ab5

11、final、finally、finalize有什么区别?

f5fba5fc3ab5

f5fba5fc3ab5

f5fba5fc3ab5

12、如何定义一个异常:

f5fba5fc3ab5

13、重写之后的异常,只能比重写之前的异常抛出的异常更少,范围更小,但是有一个异常要注意,就是RunTimeException()这个异常即使重写前没抛出异常,重写后也可以抛出RunTimeException()异常。

f5fba5fc3ab5

f5fba5fc3ab5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值