JavaSE:异常(下)

231 阅读2分钟

一些问题

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");
}