zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java异常->常见面试题汇总

JAVA面试题异常 常见 汇总
2023-09-11 14:15:13 时间

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 赋值