java异常笔记

来源:互联网 发布:微信淘宝客怎么做 编辑:程序博客网 时间:2024/05/17 04:34


1、异常处理细节:

1、定义功能时,功能中有什么问题,都应该进行预先的处理比如try catch.如果处理不了,应该通过throws声明抛出,让调用者进行处理。

2、调用了抛出异常的功能的函数,应该进行处理,如果使用try catch处理的话,被调用的功能上抛出几个异常,就应该对应几个catch语句,必须要对多个异常进行针对性的处理。

3、如果出现多个catch中存在着父类异常的catch,那么这个catch一定放在catch的最后,通常这种情况在面试很多见。

4、如果函数内抛出异常,那么一定要在函数上声明,否则编译失败,但是要注意函数内抛出的异常是运行时异常(RuntimeException),那么函数上是可以不用throws声明的。

5、如果函数内抛出了异常,进行了本功能内部的处理,但是处理的并不完全,这时应该在异常处理中,继续将异常抛出,让在函数上声明让调用者知道问题的存在,但是有可能需要将异常进行转换,尽量抛出调用者识别的异常,处理起来更方便。

6、当子类覆盖父类中的异常声明的方法时,子类方法只能声明父类的异常或者该异常的子类。如果父类抛出了多个异常,那么子类在覆盖时买智能抛出父类异常的子集。

7、如果父类和接口中的方法没有声明抛出过异常,那么子类的覆盖父类方法时,也不能抛出异常,如果子类中的方法发生了异常,那么子类只能try catch不能用throws声明,只能try,不能抛,如果非要在函数内抛出异常,那么只能抛出RuntimeException,因为这种异常不用在函数声明上。

 

2、finally:

定义一定会被执行的代码。通常用来关闭资源,

异常处理的三种格式:

1、try catchfinally

2、Try catch//可以多个catch

3、Try finally

记住:catch是用于处理异常的,如果没有catch就代表异常没有被处理过,如故哦该异常是检测时异常,必须被声明。

代码体现:

 

3、异常总结:

异常是什么?是对问题的描述,将问题进行对象的封装。

异常体系:

Throwable

|---Error

|--Exception

|--RuntimeException

异常体系的特点:

异常体系中的所有类以及建立的对象都具有可抛性。

也就说可以被throw和throws关键字操作。

只有异常体系具备这个特点。

 

Throw和throws的用法:

Throw定义在函数内,用于抛出异常对象。

Throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。

 

函数内有throw抛出异常对象,并未进行try处理必须要在函数上声明,否则编译失败,      注意:RuntimeException异常除外,也就说函数内如果抛出的是RuntimeException

函数上可以不用声明,如果函数声明了异常,调用者需要进行处理吗,

处理方式throws也可以try

 

异常有两种:

1、编译时检测异常:

该异常在编译时如果没有处理,如果没有处理(没有抛也没有try)编译失败

2、运行时异常

在编译时,不需要处理,编译器不检查,该异常发生,建议不处理,让程序停止,需要对代码进行修正。

异常处理的语句:

try

{

       需要被检测的代码

}

catch()

{异常处理代码}

fianlly

{一定会执行的代码}

 

有三种结合的格式:

1、try{}catch(){}finally{}

2、try{}catch(){}

3、try{}finally{}

注意:

1、finally中定义的通常是关闭资源,因为资源必须被释放。

2、finally只有一种情况不会执行,当执行到System.exit(0);finally

不会执行。

 

5、自定义异常

   定义类继承Exception或者RuntimeException

   1、为了让该自定义类具备可抛性。

   2、让该类具备操作异常的共性方法。

 

   当要定义自定义异常的信息时,可以使用父类已经定义好的功能

   将异常信息传递给父类的构造函数,

  class MyException extends Exception

   {

       MyException(String message)

       {

              super(message);

       }

   }

   自定义异常:按照java的面向对象思想,将程序中出现的特有问题进行封装。

 

 

   异常的好处:

   1、将问题进行封装。

   2、将正常流程代码和问题处理代码相分离,方便阅读

 

  异常的处理原则:

  1、处理方式有两种:try 或者throws。

  2、调用到抛出异常的功能时,抛出几个就处理几个。

     一个try对应多个catch的情况。

  3、多个catch父类的catch放到最下面。

  4、catch内需要定义针对性的处理方式,不要简单的定义printStackTrace,输出语句。

  也不要不写。当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

  try

  {

       throw new XXException

  }

 catch(XXException e)

  {

       throw e;

  }

  如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常。

  或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获的异常处理后,转换新的异常。

 


异常的注意事项:

在子父类覆盖时:

1、子类抛出的异常必须是父类异常的子类或者子集。

2、如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。

 

 


 

0 0
原创粉丝点击