JavaSE笔记(五)

九 异常

9.1 异常概述

异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。通过面向对象的思想将问题都封装成了对象,所以在Java中异常都是对象。在java中描述不正常情况的类就叫做异常类。

 

Java中对不正常的情况或者问题进行了分类;并不断向上抽取形成异常体系。如下图,java中异常分成了两大类:Error一般不可处理,由JVM抛出的严重问题,一般直接修改代码。、Exception可以处理。但无论是Error还是Exception都是Throwable的子类,Throwable:可抛出的;所以两大异常类都可以被抛出,让开发者知道异常发生并处理,即可抛性(凡是体系中都有可抛性)。

Error: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

 

如果让一个类成为异常类,必须要继承异常体系,因为要继承可抛性。即自定义异常类。

 

 

 

9.2 关键字throws和throw

throws和throw用来抛出异常,凡是被这两个关键字所操作的类和对象都具有可抛性。抛出:是对异常“处理”的最常见的方式,其实抛出更多的是告诉程序员程序设计出现了哪种错误,而并没有真正意义上的处理掉异常。而对于那些无法处理的异常如下标越界,空指针异常等,抛出是最好的处理,但对于那些可以处理的异常,处理的代码才是真正意义上的处理,抛出只不过是为了触发处理

代码。

 

throw用于在方法体内抛出异常,throws用于在类声明中抛出异常。如果在别的类的方法中调用了可能会抛出异常的方法,那么该这个类的方法需要处理该异常,一般为声明抛出。

 

注:throws能抛出多个异常类,throw只能抛出一个。

9.3 RuntimeException

异常也可分为运行时异常和编译时异常。(Error不谈)

 

编译时异常:即当源代码被译成class文件时,出现的异常。无法通过编译,这种问题都可以针对性的处理。一般的IDE如Ecilpse,都会显示这种错误。

 

运行时异常:在jvm运行时,抛出的异常。并且只需要在方法中throw不需要在方法上声明throws;,如除0异常,0参数被客户传入时,这种异常需要程序停下来处理。只有RuntimeException及其子类属于这种异常。

 

注意:自定义异常类时,注意要继承哪一个?Exceptiom or RuntimeException

 

 

 

9.4 try catch

try catch是异常处理的捕捉形式。是可以对异常进行针对性处理的方式。

 

格式:try{

可能出现异常的代码。。。

}catch(异常类型 参数 ){//用于接收异常类

处理代码

}

 

如果已经对可能出现的异常进行了捕捉,那么不需要在调用的方法上声明抛出该异常,如果还有其他未处理的异常除外。以为捕捉和声明跑出是处理异常的两种方式。

 

注:一个try可以配多个catch,即捕获多个异常类,但是多个异常类的顺序从范围小的到大的(子在上父在下)。因为对已经处理的异常类型,再次传入catch会报错。

 

注:catch(Exception e)已经捕获了所有异常类;联系上个“注”。

 

e.printStackTrace();这个方法来自父类Throwable类,jvm默认的异常处理机制就是调用异常对象的这个方法。打印异常信息。

 

还有一个常用catch内处理代码 throw new RuntimeException(e);

 

异常处理原则:1 函数内容如果抛出需要检测的异常,那么函数上必须声明,或者用try catch捕获,否则编译失败。 2 如果用到了声明异常的函数,必须声明或捕获,否则编译失败。

3抛出和try catch的选择:功能内容可以解决的,用catch;不能解决的用throws告诉调用者,让调用者解决。4 如果一个功能抛出多个异常,那么调用时就catch几个。

 

9.5关键字finally

顾名思义;最终即最后会执行的,即一定会执行的代码。并且只能用在try catch语句。例外:catch中执行了System.exit(0);//jvm停止工作,finally中不会被执行。

 

格式:try{

}catch(){

 

}finally{

}

 

Ps: final 和finally注意区别

 

finally主要用于释放资源,如关闭数据库连接、关闭流等。

 

 

异常的注意事项:子类在覆盖父类方法时,父类方法如果抛出了异常,那么子类的方法只能抛出父类的异常或该异常的子类,如果抛出多个异常那么子类只能抛出父类异常的子集(不能多过父类),并且覆盖时父类没有抛出异常,子类绝不能抛出,自能try。

转载于:https://my.oschina.net/ByIjNn/blog/700648

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值