
1、异常有哪些?
答:异常体系可以分为error和Exception两类,error指示系统级错误,一般不出现,出现导致jvm关闭,再就是Exception,这也是我们常遇到的异常的集合,Exception又可以分为编译时异常也就是没有继承RuntimeException类的异常,通常可能编译器就会报错,就比如我们常遇到的sqlException ,NotFoundException ,classNotFoundException ,IOException等等都是编译期间的异常,再就是运行时异常,指在编译期间无异常,但是运行会出现异常,比如我们常遇到的NullPointException(空指针异常)、类型强制转换异常:ClassCastException;.算术异常类:ArithmeticExecption;数组下标越界异常:ArrayIndexOutOfBoundsException等等这些异常
2、运行时异常和受检异常有什么区别?答:运行时异常一般指的是继承了RuntimeException的异常,他表示这种异常不需编译器进行检测,只是运行阶段可能会出现异常,我们通常使用try-catch语句进行捕获,受检异常则表示在编译时代码会出现问题,就比如我们在写sql是会有sqlException,它属于受检异常。
3、Try-catch-final中,final是不是一定会被执行,在什么情况下执行?答:不一定会被执行,可能在执行final之前,我们调用系统类,调用exit退出程序,则final就不会执行
正常情况下final总是在return之前执行
4、Try-catch-final中,哪些部分可以被省略答:catch和final都能被省略
5、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?答:会执行,缺final方法会在return之前执行
6、Error 和 Exception 的区别?答:前者要么不出问题,只要出现问题,我们只是通过简单的代码调试是无法解决的,所以对于就没有捕获异常的必要
后者,是有预见性的,比如我们经常会遇到什么问题,我们可以提前进行设计,当发生这个问题我们可以通过调试代码进行修改
7、throw和throws的区别答:throw一般在try-catch 语句中使用,每次只能捕获抛出单个异常
throws一般在方法体使用,可以同时抛出多个异常
8、主线程可以捕获子线程的异常吗?答:一般是不可以的。每个线程只能捕获自己本身的异常
9、如何自定义异常答:继承Execption类或者RuntimeExecption类,然后构造方法,以及tostring。
//自定义异常类
public class MyException extends Exception{
//传递数字>10;
private int de;
public MyException(int a) {
this.de = a;
}
//toString:异常的打印信息
@Override
public String toString() {
return "MyException{" + de + '}';
}
}
10、常见的 RuntimeException 有哪些?
NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。 IllegalArgumentException - 传递非法参数异常。 ArithmeticException - 算术运算异常 ArrayStoreException - 向数组中存放与声明类型不兼容对象异常 IndexOutOfBoundsException - 下标越界异常 NegativeArraySizeException - 创建一个大小为负数的数组错误异常 NumberFormatException - 数字格式异常 SecurityException - 安全异常 UnsupportedOperationException - 不支持的操作异常 NegativeArrayException —— 数组负下标异常 ArrayIndexOutOfBoundsException - 数组下标越界异常 EOFException - 文件已结束异常 FileNotFoundException - 文件未找到异常 NumberFormatException - 字符串转换为数字异常 SQLException - 操作数据库异常 IOException - 输入输出异常 NoSuchMethodException - 方法未找到异常