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. 方法覆盖的要求。

  1. 子类的方法名、形参列表、返回值类型和父类相同
  2. 子类的方法修饰符和父类相同或是比父类更宽
  3. 子类的方法不能抛出比父类更宽的异常

5. 手动写出一个自定异常类MyException.

  1. 定义一个类继承Exception或是其子类,如果基于定义的类抛出异常为运行时异常,则需要继承RuntimeException或是其子类
  2. 提供两个构造方法:
   (1) 无参数的构造方法
(2) 带有String类型参数的构造方法,参数代表异常信息,借助
super(message) 为父类属性massage 赋值