您的位置:首页 > 职场人生

黑马程序员_异常

2014-04-23 18:47 218 查看
-----------android培训java培训、期待与您交流!
------------

1、异常的概念

异常:就是程序在运行时出现的不正常情况。

异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述并封装成对象,即Java对不正常情况进行描述后的对象体现。

异常分类:一种是严重的问题,java通过Error类进行描述。对于Error类一般不编写针对性的代码对其进行处理。另一种是非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。无论Error类或者Exception类都具有一些共性内容。比如:不正常情况的信息,异常引发原因等。

Java.lang.Throwable类是Error类和Exception类的超类。

异常的好处:1、将问题进行封装;2、将正常流程代码和问题代码相分离,方便阅读。

2、异常处理语句。

格式:

try

{ 需要被检测的代码 }

catch(异常类变量)

{ 处理异常的代码;(处理方式)}

finally

{ 一定会执行的语句;}

1.7新特性:

try-with-resources资源的自动回收管理

Java中某些资源是需要手动关闭的,如InputStream、Writer和Sockets等。这个新的语言特性允许try语句本身申请更多的资源(该资源需实现java.lang.AutoCloseable接口和java.io.Closeable接口),这些资源作用于try代码块,并自动关闭。

这个:

BufferedReader br = new BufferedReader(new FileReader(path));

try {

return br.readLine();

} finally {

br.close();

}

变成了这个:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {

return br.readLine();

}

你可以定义关闭多个资源:

try (

InputStream in = new FileInputStream(src);

OutputStream out = new FileOutputStream(dest))

{

// code

}

注意:1、try可与catch或finally组合使用;2、可使用一try多catch语句形式,使用多catch语句时,若异常类型间存在继承关系,要将子类异常语句置前,父类异常语句置后;3、finally常用来释放申请的资源,在一种情况下finally语句不执行,即System;.exit(0),系统结束,JVM退出;4、finally语句严禁返回内容,finally语句在try语句中的return语句执行期间执行,即return先将返回结果放在函数栈,然后执行finally语句后才将返回结果返回给指定变量,若finally语句中使用了return语句,则finally语句中return的返回结果将覆盖try语句中return的返回结果,最终导致返回结果异常。

3、异常声明

用throws关键字对有可能抛出异常的方法和类进行异常声明。

在调用声明异常的方法时,编译器会对异常进行提示,要求处理,提高了安全性。

注意:1、根据编译器是否检查异常,异常又分为检查异常和非检查异常,非检查异常又称为运行时异常,因该类异常发生时程序无法向下继续执行,故可不用在方法和类上对该类异常进行声明;2、声明异常时,建议声明具体的异常类型,可同时声明多个异常,用逗号分隔。

4、异常的处理

对于catch语句捕捉到的异常常有三种处理方式:

1) 对捕获的异常进行处理,不传递任何异常给调用者;

2) 将捕获的异常原样抛出,即将异常传递给调用方法;若调用者一直未处理,默认由JVM处理;

3) 对捕获的异常进行转换,即对原异常处理后,抛出另一类型能被调用者处理的异常。

抛出异常关键字throw,后跟异常类或对象。

注意:throw语句类似return语句具有跳转功能,故throw语句后不能定义其他语句,因为不会被执行。

5、自定义异常

项目中出现的异常未被Java所描述封装,需要自定义所需的异常类型。

超类Throwable类已经定义了异常信息的操作,因而子类只需在构造时,将异常信息传递给父类的构造函数,然后在调用getMessage()方法获取。

自定义异常要点:1、必须是自定义异常类继承Exception,异常具有可抛性,只有Throwable体系中的类和对象才可以被throws和throw操作;2、若自定义的异常发生后会终止程序运行,可让自定义异常类继承Exception类的子类RuntimeException。

6、异常在子类重写父类方法中的原则:

子类重写的方法不能抛出比父类方法更多的异常(即只能不抛异常或抛出父类相同的异常或父类异常的子类)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: