您的位置:首页 > 其它

对于异常处理的初步总结

2017-01-17 08:58 176 查看
1)分类:JAVA中所有的异常都派生与Throwable类,Throwable下面分为两个分支:Error和Exception,Error描述的是系统内部和资源耗尽的错误,对于这类错误我们只能通告用户并使程序安全的的终止。而需要我们处理的错误是属于Exception的错误。Exception错误又可划分为RuntimeException和其他异常,由于程序本身的错误导致的异常是RuntimeException(如果是RuntimeException异常出现,那么就一定是你的问题),而程序本身没问题而由于I/O错误导致的异常属于其他异常。Error类和RuntimeException类异常属于未检测异常(unchecked),所有的其他异常称为已检测异常(checked),java编译器为所有的已检测异常提供了异常处理器。
2)抛出异常语法:如果方法有可能抛出异常,那么就要在函数内部用关键字throw抛出异常对象,并在方法声明时用关键字throws声明可能抛出的异常
public int div (int a ,int b) throws ArithmeticException
{
if(b==0)
{
throw  new ArithmeticException();
}
return a/b;
}


我们在方法后面声明异常是为了调用者将异常用try {}catch{}语句进行处理,而对于RuntimeException异常, 由于这类异常是由于人为因素出的错误,我们希望这个错误暴露给程序猿让程序员改正,而并不是让程序把错误进行隐藏。所以这类错误只需要在函数中用throw语句抛出,并不需要在方法后面进行声明。
对于以下两种情况必须在方法后面声明异常:
                                                                 (1)方法调用抛出已检测异常的方法;(2)程序运行时出现错误,并用throw语句抛出了已检测异常
*注意:如果子类覆盖了超类中的方法,子类方法中声明的已检测异常必须比超类方法中声明的已检测异常更特定。如果超类方法没有声明已检测异常,则子类方法也不能声明已检测异常。
3)捕获异常try........catch.......finally.......
     try中的语句如果返回了一个异常对象,catch中必须有接收相应异常的语句,并且此时try中的其他语句将跳过,开始执行catch中相对应的语句,finally中的语句是一定会执行的语句。如果try中的异常对象不是由catch捕获,那么程序将try中的所有异常对象抛出以后将会跳过try中剩余的代码执行finally中的语句。
     finally中一般存放的是释放资源的代码,即使上面的语句中出现了return等结束函数的代码,finally依然会被执行,但是如果执行了System.exit(0);语句。finally不会被执行。
     catch语句中也可以抛出异常,这个用法十分重要,可以将捕获到的异常换成另一种合适的异常抛出。比如子类方法的异常声明受到父类方法的限定,这时就可以捕获到子类方法特有的异常后再将一个父类方法异常的子类对象抛出。
4)新建自定义的异常类:
     我们新建的异常类应该派生于Exception类或者它的子类,其中应该包含两个构造器,一个默认构造器一个参数为String的调用父类构造器的构造器,String为描述异常的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: