一些问题
001.Error和Exception的区别?
Error是程序无法处理的错误,如系统崩溃、虚拟机错误、内存空间不足等,这类问题导致应用程序中断;这些错误是不可查的,编写程序者不用关心这类异常;
Exception是程序可以处理的异常。它又分为检查型异常(checked exception)和非检查型异常(unchecked exception)
检查型异常:发生在编译时,需要使用try-catch(或者throws)处理异常,否则编译不会通过;
非检查型异常:发生在程序运行时,如以零作除数引发的ArithmeticException,导致程序崩溃;
002.最常见的5种RuntimeException
java.lang.NullPointerException --空指针异常
java.lang.ClassNotFoundException --指定的类找不到
java.lang.NumberFormatException --数字格式转换异常
java.lang.ArrayIndexOutOfBoundsException --数组下标越界异常
java.lang.IllegalArgumentException --方法传递参数错误
java.lang.ClassCastException --数据类型转换异常
java.lang.InstantiationException --实例化异常
SQLException --SQL异常,常见于操作数据库时的SQL语句错误
003.throw和throws的区别?
throw
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理;
throw是具体向外抛出异常的动作,所以它抛出的是一个异常实例;
throws
throws语句用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理;
throws主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型;
throws表示出现异常的一种可能性,并不一定会发生这种异常;
004.final、finally、finalize的区别?
final:声明变量时,表示该变量不可修改;声明方法时,表示该方法不可重写;声明类时,表示类不可被继承;
finally:是异常处理语句结构的一部分,表示总是执行;
finalize:Object类的一个方法,在垃圾回收器将要回收对象所占内存之前被调用;(finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated)
005.一些选择题
/**
* 输出30
*/
public class Test {
public static void main(String[] args) {
int num = 10;
System.out.println(test(num));
}
public static int test(int a){
try{
a+=10;
return a;
}catch(Exception e){
return 3;
}finally{
a+=10;
return a;
}
}
}
/**
* 输出20
*/
public class Test {
public static void main(String[] args) {
int num = 10;
System.out.println(test(num));
}
public static int test(int a){
try{
a+=10;
return a;
}catch(Exception e){
return 5;
}finally{
a+=10;
}
}
}
/**
* finally里面的代码不会被执行(特例)
*/
try{
//do someting
System.exit(1);
}finally{
System.out.println("finally");
}
复制代码