关于java Exception error runtimeException 还有非runtimeException

来源:互联网 发布:av淘宝7m视频2017淘 编辑:程序博客网 时间:2024/05/29 12:36

今天看了一篇博客,java异常的,我觉得写得很通俗易懂 ,在这里记录一下。

先说说error,error一般是jvm抛出,内存资源耗尽或者一些内部问题,这个不应该出现在应用程序中,一般不去管它,而应该把精力放在Exception上。

         Exception继承体系,基类为Throwable,error和Exception继承于Throwable,runtimeException和ioException继承与Exception,具体的runtimeException继承于runtimeException。

         RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。 

         其他非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

        声明:throwsthrows在函数的括号之后用,将需要抛出的异常进行声明,一个方法是否抛出异常和函数的返回值一样重要,如果不声明异常,而且内部没有自己编写的异常处理,那么方法就不知道该用什么异常控制器来处理。

throw用来抛出指定异常。

        抛出什么异常?对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。

 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。 

 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息。

捕获异常,try,catch,finally,不管异常处理结果怎么样,都会进入到finally。

① 过度使用异常 :首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。 

② 将异常与普通错误区分开:对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。 

③ 异常对象中包含的信息 :一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。

         总之,异常经历了一个抛出捕获处理结束的过程。


最后,再引用thinking injava中的异常使用指南来结束,

1.在恰当的级别处理问题(在你知道如何处理的时候才去捕获)

2.解决并重新调用产生异常的方法。

3.进行少许修补,然后绕过异常发生的地方继续执行。

4.用别的数据进行计算,以替代方法返回的期望值。

5,6。把当前运行环境下能做的事情尽量做完,然后把相同的(不同的)的异常重抛(抛)到更高的地方

7.终止程序。

9.进行简化。

10.让类库和程序更安全。

0 0