异常处理

                                                                            异常处理 

1、异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能出现的异常,是程序员编程错误造成的。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

 

2、error和Exception的区别

         java异常结构中定义有Throwable类,Exception和error是其派生出的两个子类。其中Exception表示由于网络故障,文件损坏,设备错误,用户输入非法等情况导致的异常。而error表示java运行时环境出现的错误,入JVM内存资源耗尽。

3、常见的Runtime Exception

          NullPointerException 空指针(引用)引发的异常

          NumberFormatException:数据格式转换出现问题时出现此异常。

          ClassCastException:强制类型转换类型不匹配时出现此异常。

          ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。

          ArithmeticException:数学运行错误时出现此异常

4异常类的继承体系

                                   |-----AWTError

                 |--------Error---|-----IOError

                 |                 |------ThreadDeath

Throwable ---|                 |------LinkageError

                 |                              |---------SQLException

                 |----------Exception--------|---------IOException              |------IndexOutOfBoundsException

                                                |---------RuntimeException------|------NullPointerException

                                                                                       |-------ClassCastException

java的异常可分为可检测异常,非检测异常,自定义异常

     可检测异常:经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,不捕捉这个异常,编译器就通不过不允许编译。

     非检测异常:不遵循处理或声明规则。在产生此类异常时不一定非要采取任何适当操作,编译器不会检查是否已经解决类这样一个异常。RuntimeException也属于非检测异常

     自定义异常:是为了表示应用程序的一些错误类型,为代码可能发生的一些或多个问题提供新含义。

 

4、访问异常信息

      >getMessage(); 返回该异常的详细描述字符串

      >printStackTrace( ); 将该异常的跟踪栈信息输出到标准错误输出

      >printStackTrace(PrintStream s); 将该异常的跟踪栈信息输出到指定输出流

      >getStackTrace( ); 返回该异常的跟踪栈信息

5、使用throws声明抛出异常

      throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,之间以逗号隔开

语法格式: throws ExceptionClass1, ExceptionClass2...

一旦使用throws语句声明抛出该异常,程序就无须使用try...catch块来捕获异常了

6、使用throw抛出异常

      如果需要在程序中自行抛出异常,应使用throw语句,可以单独使用,throw语句抛出的不是异常类,而是一个实例,而且每次只能抛出一个异常实例。

语法格式: throw ExceptionInstance;

7、异常处理规(1)不要过度使用异常(2)不要使用过于庞大的try块(3)避免使用CatchAll语句

(4)不要忽略捕获到的异常

8、自定义异常类

     用户自定义异常类都应该继承Exception基类,如果自定义Runtime异常,应继承RuntimeException基类。

     定义异常类是通常需要提供两种构造器:一个是无参数的构造器,另一个是带以字符串参数的构造器,这个字符串将作为该异常对象的详细说明(也就是异常对象getMessage方法的返回值)

catch和throw同时使用

      在实际应用中,当一个异常出现是,单靠某个方法无法完全处理该异常,必须有几个方法协作才可完全处理该异常。也就是说,异常出现的当前方法中,程序只对异常进行部分处理,还有些方法需要在该方法的调用者中才能完成,所以应该再次抛出异常,这样就可以让该方法的调用这也能捕获到异常。这种情形可以通过在catch块中结合throw来完成。

9、try语句

       try{......}语句指定类一段代码,该代码就是一次捕获并处理例外的范围,在执行过程中,该代码可能会产生并抛出一种或几种类型的异常对象,后面的catch语句分别对这些异常作相应的处理。如果没有例外发生,所有的catch代码段被忽略过不执行。

10、catch语句

在catch语句块中用如下方法获取信息

getMessage(); printStackTrace( );

11、finally块

      fianlly语句为异常处理提供一个统一的出口,使得在控制流程转到程序其他部分以前,能够对程序的状态做统一的管理,无论try所指定的程序块中是否抛出例外,fianlly所指定的代码都要被执行。

通常在finally语句中可以进行资源的消除工作,如关闭打开的文件,删除临时文件等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值