1、异常是什么?
程序执行时,遇到非语法错误的非正常情况,JVM无法运行;
系统中断处理程序,产生异常类的对象;
2、什么是编译器异常?处理编译器异常的方法有哪些?
编译器异常是编写代码出现的异常,在Intellij idea 中就是显示橙色背景的异常;
throw …exception 给JVM处理,JVM会中断处理;
try catch 编译器会抛出异常并继续执行try catch 后的代码;
3、什么是运行期异常?处理运行期异常的方法有哪些?
运行期异常是在运行程序时出现的异常,在编写程序时不会报错的异常;
4、try catch 如何使用?它的作用是什么?
try 后面的代码是可能出现异常的代码;
catch 后面的代码是出现异常后的处理代码;
try catch 的作用是处理出现异常的代码加上继续执行try catch 后面的代码;
5、error处理和exception处理的差别是什么?
exception处理分为编译器异常处理和运行期异常处理;
error处理只能修改源代码;
6、为什么throw 后面的创建的是什么对象的时候可以不处理,交给JVM处理?
RunTimeException 运行期异常;
7、当子方法传入参数时,要做什么提前工作?
合法性校验;
8、对方法中传入数组和索引,如何做校验工作?
数组不为null,否则 NullPointerException 空指针异常;
索引不能小于0或大于arr.length-1,否则 Array Index Out Of Bounds Exception 数组索引越界异常;
9、如果throw 后面创建的是父类异常,如何处理?
在方法外部多加一层throws 某异常,在调用该方法的外部,都加一层 throws 某异常;
在编译器提示的地方 alt+enter 可以快速解决问题;
在方法内部是 throw 关键字,在方法外部是 throws 关键字;
public class test {
public static void main(String[] args) throws IOException {
readFile("c://a.txt");
}
public static void readFile(String fileName) throws IOException {
if (!fileName.equals("c://a.txt")) {
throw new FileNotFoundException("文件未找到");
}
if (!fileName.endsWith(".txt")) {
throw new IOException("后缀名不对");
}
}
}
10、try catch 处理异常比 throw 好的优势是什么?
throw 抛出异常后,后面的程序将不再运行;
try catch 抛出异常后,后面的程序继续执行;
11、try catch 的格式是什么?
try{可能产生错误的代码}
catch(异常代号 异常对象名){处理异常的逻辑}
处理异常后的代码
12、finally代码块的作用是什么?怎么用?
finally里面存放的代码是无论是否产生异常都要执行的代码;
finally的作用是资源释放;
和try catch 合并使用;
13、多个异常如何用 try catch?
(1) 多次捕获,多次处理,即遇到一个异常就 try catch 一下;
(2) 一次捕获,多次处理,即一个 try, 多个 catch;
(3) 一次捕获,一次处理,这需要catch 里面的异常是一个包含所有可能出现的异常类;
14、一次捕获多次处理中,如果捕获到的异常有子父类关系,该怎么办?为什么要这样做?
子类的处理 即 子类的 catch 要放在父类的上面;
因为 try 中产生了异常对象,会从上到下依次赋值给 catch 定义的异常对象进行选择,如果先赋值给了父类变量名,那么就会使用多态,那么子类异常就不会被赋值到,也就不会被使用,这个错误编译器会提示;
15、父类方法有异常,子类重写的方法怎么处理?
要么抛出相同异常;
要么抛出子类异常;
要么不抛出异常;
16、父类方法没有异常,如果子类方法中有异常,需要怎么处理?
不能用 throw 声明异常,毕竟父类方法没有异常;
那么子类方法有异常,只能在子类方法内部用try catch 处理;
17、如何自定义异常类?
命名结尾一般为Exception;
继承Exception或RuntimeException;
继承Exception 就是 编译器异常,否则就是运行期异常;
在自定义的异常类中定义一个空参构造方法和一个含参构造方法;
在空参构造方法和含参构造方法都将参数传给父类,即super() 或者 super(参数);