java异常处理机制中的try-catch:
示例:异常捕获机制在IO中的用法
异常处理在IO中的应用finally两道面试题
面试题1:见下面的代码
总是finally返回的值面试题2:请简述:final,finally,finalize
1)Final可以用于成员变量(包括方法参数),方法、类。
作为变量:变量一旦被初始化便不可改变(对于基本类型,指的是值不变;对于对象类型,指的是引用不变),初始化只可能在两个地方:定义处和构造函数。
作为方法参数:对于基本类型,定义成final参数没有什么意义,因为基本类型就是传值,不会影响调用语句中的变量;对于对象类型,在方法中如果参数确认不需要改变时,定义成final参数可以防止方法中无意的修改而影响到调用方法。
Final方法:不可覆写,编译器将对此方法的调用转化成行内(inline)调用,即直接把方法主体插入到调用处(方法主体内容过多的时候反而会影响效率)
Final类:不可继承
2)finally
异常处理关键字,finally中的主体总会执行,不管异常发生是否。
3)finalize
类的Finalize方法,可以告诉垃圾回收器应该执行的操作,该方法从Object类继承而来。在从堆中永久删除对象之前,垃圾回收器调用该对象的Finalize方法。注意,无法确切地保证垃圾回收器何时调用该方法,也无法保证调用不同对象的方法的顺序。即使一个对象包含另一个对象的引用,或者在释放一个对象很久以前就释放了另一个对象,也可能会以任意的顺序调用这两个对象的Finalize方法。如果必须保证采用特定的顺序,则必须提供自己的特有清理方法。
throw----用于抛出一个异常,通常两种情况会要求抛出一个异常:
1)当前方法中出现了一个满足语法要求,但是不满足业务逻辑要求的情况时,可以当做一个异常抛出给调用者,通知其这样的操作不允许。
2)当前方法代码中确实出现了异常,但是该异常不应当由当前方法来解决时可以将其抛给调用者。
throws----程序中会声明许多方法(Method),这些方法中可能会因某些错误而引发异常,但您不希望直接在这个方法中处理这些异常,而希望调用这个它的方法来统一处理,这时候您可以使用“throws”关键词来声明这个方法将会抛出异常
throw、throws用法重写父类含有throws异常抛出声明的方法时,子类对该方法重写的准则:
1)可以不再抛出任何异常
2)允许抛出部分异常
3)允许抛出父类方法抛出异常的子类型异常
4)不允许抛出额外异常
5)不允许抛出父类方法抛出异常的父类型异常
Java异常可以分为可检测异常,非检测异常
可检测异常:可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,不捕捉这个异常,编译器就通不过,不允许编译
非检测异常:非检测异常不遵循处理或者声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已经解决了这样一个异常
RuntimeException 类属于非检测异常,因为普通JVM操作引起的运行时异常随时可能发生,此类异常一般是由特定操作引发。但这些操作在java应用程序中会频繁出现。因此它们不受编译器检查与处理或声明规则的限制 。
常见异常:
1)IllegalArgumentException
抛出的异常表明向方法传递了一个不合法或不正确的参数
2)NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常
3)ArrayIndexOutOfBoundsException
当使用的数组下标超出数组允许范围时,抛出该异常
4)ClassCastException
当试图将对象强制转换为不是实例的子类时,抛出该异常
5)NumberFormatException
当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
异常常用方法:
getCause()方法:
很多时候,当一个异常由另一个异常导致异常而被抛出的时候,Java库和开放源代码会将一种异常包装成另一种异常。这时,日志记录和打印根异常就变得非常重要。Java异常类提供了 getCause()方法来检索导致异常的原因,这些可以对异常根层次的原因提供更多的信息。
自定义异常,通常用来说明业务逻辑级别的异常:
自定义异常
网友评论