Java异常的根类是Throwable,Java所有非正常情况分为两种:Exception和Error,他们都继承于Throwable,Error由系统底层产生,
应用程序无法处理这些异常,应该修改代码。Java中的异常分为两种:一种是运行时异常,一种是检查式异常。当出现运行时异常时
我们可以不用处理,而是由虚拟机接手,常见的五种运行时异常有ClassCastException(类转换异常)、IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)、ArrayStoreException(数据存储异常)、BufferOverflowException异常;运行时异常则必须进行写代码处理:
处理的方式有两种:一是利用try语句块进行处理;2是利用throws声明异常并将异常交给上级方法处理。try语句块的形式是:try{}catch(){}finally{},try里面放的是可能产生异常的代码,catch语句块中放置的是对异常的处理,当try中发生异常时,执行catch里的代码,否则,不进入catch执行;finally中的代码始终会执行,用于释放资源。如果需要在程序中自行抛出异常,应该使用throw,throw语句在形式上和throws语句很像,但是他们的用法却有很大不同
它们的区别主要由以下几点:1、位置不同:throws语句用在函数上,后面跟的是异常类,可以跟多个;throw用在函数类,后面跟的是异常对象2、功能不同:throws用来声明异常,让调用者知道该功能有可能出现问题,并由调用者预先给出处理方式;throw跑出具体问题对象,执行到throw功能就已经结束了,跳转到调用者。并将具体的问题对象也抛给调用者。也就是说throw语句独立存在时,下面不 要定义其他语句,因为执行不到。throws和throw的联系:功能内部有异常throw抛出时,功能上一定要throws声明,内部抛什么,功能上就声明什么。声明的目的是为了让调用者处理,如果调用者不处理,编译失败。
特殊情况:当函数通过throw抛出了RuntimeException及其子类的异常对象时,函数上可以不用throws声明。不声明的目的就是不让调用者处理,让调用者的程序停止,对代码进行修改。在继承体系中,子类在重写父类方法时,如果父类方法抛出了异常,那么子类方法只能抛出父类方法异常或者父类异常异常的子类;如果父类方法没有跑出异常,在子类覆盖时,子类方法中发生了异常,就只能try,无法throws声明。在很多时候需要用到自定义异常,自定义异常时应该继承Exception或RuntimeException。然后提供两个构造函数,一个无参,一个带字符串参数。这个字符串就是对自定义异常的详细说明。
|
|