Java异常->常见面试题汇总
1. Java中异常的分类
1>. 父类:Throwable
(1) Throwable:位于 java.lang包中,是所有错误、异常的父类 (2) 常见 方法: a.String getMessage():返回字符串类型异常信息,给用户做提示信息 b.void printStackTrace():打印跟踪方法调用栈而获取的详细异常信 息,作用:用于开发人员做程序调试,建 议在catch中调用,尽可能不要省略
2>. 子类:Error,是Throwable直接子类,代表错误
(1) 特点:代表仅靠程序本身无法恢复的严重错误 (2) 案例: 内存溢出:java.lang.StackOverflowError(栈溢出)、 OutOfMemoryError堆溢出 (3) 处理:一旦遇到 Error,无法靠程序处理(不要试图捕获)
3>. 子类:Exception,是Throwable直接子类,代表异常
(1) RuntimeException:运行时异常、未检查异常 a. 定义:RuntimeException异常及子类或是间接子类统称为运行时异常 b. 特点:运行时异常在编译过程中编译器不会检测此类异常,运行时报错 c. 处理:可以处理也可以不处理,可以通过规范代码避免 d. 案例:常见的运行时异常: I.java.lang.ClassCastException:类型转换异常 II. java.lang.NullPointerException:空指针异常 III.java.lang.ArrayIndexOutOfBoundsException :数组下标越界 IV.java.lang.StringIndexOutOfBoundsException: 字符串下标越界 V. java.lang.IndexOutOfBoundsException:List集合下标越界 VI. java.lang.NumberFormatException:数字的格式转换异常 (2) 非RuntimeException:非运行时异常 已检查异常(CheckedException) a. 定义:和RuntimeException没有任何继承关系的异常类统称为非运行 时异常 b. 特点:编译过程中编译器检测此类异常,在编译过程中报错 c. 处理:必须处理,如果不处理,无法运行 注意:编译报错有两种情况: I. 语法出现错误 II. 有可出现非运行时异常 d. 案例: Class.forName("TestStudent"); // 出现非运行时异常
2. 写出 throw 和 throws 的区别。
throw用于手动产生异常,定义在方法内部 语法:throw new 异常类名(); throws用于消极处理异常,定义在方法的声明位置 修饰符 返回值类型 方法名(形参列表)throws 异常类名{}
3. 写出 final 、finalize、finally的区别
final:修饰符,可以修饰变量、方法、类
final修饰的变量作用范围内常量
final修饰的方法允许继承不允许被覆盖
final修饰的类不能被继承,即没有子类
finalize:方法名,垃圾回收器回收垃圾对象时,jvm自动调用方法
finally:应用积极处理异常try…catch…finally中,必须执行的语句
4. 方法覆盖的要求。
子类的方法名、形参列表、返回值类型和父类相同
子类的方法修饰符和父类相同或是比父类更宽
子类的方法不能抛出比父类更宽的异常
5. 手动写出一个自定异常类MyException.
定义一个类继承Exception或是其子类,如果基于定义的类抛出异常为运行时异常,则需要继承RuntimeException或是其子类
提供两个构造方法:
(1) 无参数的构造方法 (2) 带有String类型参数的构造方法,参数代表异常信息,借助 super(message) 为父类属性massage 赋值