黑马程序员_异常

来源:互联网 发布:sybase数据库下载 编辑:程序博客网 时间:2024/06/05 05:54

-----------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、异常在子类重写父类方法中的原则:

   子类重写的方法不能抛出比父类方法更多的异常(即只能不抛异常或抛出父类相同的异常或父类异常的子类)。

0 0
原创粉丝点击