JAVA 异常

释义:在程序运行过程中,可能会出现异常情况,比如被0除、对负数计算平方根,还有可能会出现致命的错误,比如内存不足、磁盘损坏无法读取文件等,对于这种异常和错误情况的处理,统称为异常处理。

            Java异常处理主要通过5个关键字来控制:trycatchthrowthrows finallytry的意思是试试它所包含的代码的代码段中是否会发生异常;而catch表示当有异常时捕获它,并进行相应的处理,使程序不受该异常的影响而继续执行下去;throw表示在程序中明确印发异常;throws的作用是如果一个方法可以引发异常,而它本身并不对该异常进行处理,那么它必须将这个异常抛给调用它的方法;finally表示无论是否发生异常都要被执行的代码。

 

关键字的用法

 throws 出现在方法的生明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型;

 throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后抛出。

 try出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句,如果在执行过程中某条语句抛出异常吗,那么代码块后面的语句将不被执行。

 catch出现在try代码块后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。

 

2 自定义异常类

 

  实现自定义异常类的关键技术点如下:

  Java.lang.Throwable 类是所有异常的基类,它包括两个子类,即Exception ErrorException类用于描述程序能够捕获的异常,如果ClassNotFoundExceptionError类用于支出合理的应用程序不应该试图捕获的严重问题,如果虚拟机错误VirtualMachineError

  自定义异常类可以继承Throwable类或者Exception类,而不是继承Error类。自定义异常类之间也可以有继承关系。

 需要为自定义异常类设计构造方法,以方便构造自定义异常对象。

 

例子:

public classMyFirstExcetpion extends Exception {

publicMyFirstExcetpion(){

super();

}

publicMyFirstExcetpion(String msg){

super(msg);

}

publicMyFirstExcetpion(String msg,Throwable cause){

super(msg,cause);

}

publicMyFirstExcetpion(Throwable cause){

super(cause);

}

 

publicstatic void testException() throws MyFirstExcetpion{

thrownew MyFirstExcetpion("这是一个异常");

}

 

publicstatic void main(String[] args) {

try{

MyFirstExcetpion.testException();

}catch (MyFirstExcetpion e) {

System.out.println(e.getMessage());

//                        e.printStackTrace();

}

}

}

 

3 使用finally

 

  finally用法如下:

     关键字finally用在try catch语句之后,表示无论是否发生异常,都会执行finally块中的代码。

     一般情况下,先执行try块,如果有异常再执行catch块,最后再执行finally块,除非try块或者catch块中有跳转语句,如return,那么在执行跳转语句之前,finally块中的代码被执行。因此finally块中的代码一定会被执行。

    由于finally块中的代码肯定会执行,所以常常关闭资源(如关闭文件、关闭数据库连接等)的语句放在finally块中。

   不要在finally块中使用跳转语句,如return等,因为这会使得try块和catch块中的跳转语句失效。

 

 

4 使用异常的技巧与原则

 

  Java的异常处理涉及程序流程的跳转,所以虚拟机需要保存程序的执行流程,以便在异常发生时能正常跳转,这也就导致了使用异常时会引起额外的开销,因此要谨慎使用异常。

 使用异常应遵循如下几个原则:

  尽量避免使用异常,将异常情况提前检测出来、

  不要为每个可能会出现的异常的语句都设置try catch

  避免在方法中抛出或者捕获运行时异常RuntimeExceptionError

 避免总是catch Exception Throwable,而要catch具体异常类,这样可以使程序更加清晰。

  不要压制、隐瞒异常,将不能处理的异常往外抛,而不是捕获之后随便处理。

  不要宰循环中使用try……catch,尽量将try……catch放在循环外或者避免使用。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值