一.Throwable 的子类包含哪两类?简述Java Error类与Exception类的区别。
- Error :致命异常,只能人工介入。
- Exception:非致命异常,程序可处理。分为受检异常和非受检异常。
二.Exception又分为checked异常和unchecked异常,请分别举例说明。
- checked异常:需要使用try-catch和throws处理
class A{
public static void main(String[]args){
try(Scanner sc=new Scanner(System.in)){
int a=sc.nextShort();
}catch (Exception e){
e.printStackTrace();
}
}
}
- unchecked异常:编译器不会检查的异常。一般为派生于Error或者RuntimeException的异常。
public class TestArray {
private static int[] a;
public static void main(String[] args){
System.out.println(a[0]);
}
}
三.请查阅资料,简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。
- StackOverflowError(栈溢出):程序使用的栈深度超过虚拟机分配给线程的栈大小。
- OutOfMemoryError(内存溢出):Java虚拟机因对象内存不足而无法分配对象,垃圾收集器也无法提供更多内存。
四.简述异常处理的两种方式,并举例说明区别。
- 声明抛出处理:
- 程序捕获处理:
try
{statements}
catch(ExceptionType1 ExceptionObject)
{Exception Handling }
catch(ExceptionType2 ExceptionObject)
{Exception Handling }
……
finally
{Finally Handling }
五.选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。(例如算术异常,空指针异常,类转换异常,数组越界异常等)
//算术异常
class A{
public static void main(String[]args){
try{
int a=1/0;
}catch (Exception e){
e.printStackTrace();
}
}
}
//空指针异常
class A{
public static void main(String[]args){
Scanner sc=null;
try{
sc.nextBoolean();
}catch (Exception e){
e.printStackTrace();
}
}
}
//数组越界异常
class A{
public static void main(String[]args){
int []a=new int[5];
try{
System.out.println(a[-1]);
}catch (Exception e){
e.printStackTrace();
}
}
}
六.根据某业务场景自定义一个异常类,并在某场景下抛出该异常对象。
七.异常中的throws声明与throw语句的区别是什么?请举例说明。
- throw:表示方法内抛出某种异常对象。
- throws:方法的定义上使用,表示可能抛出某种异常。
八.finally子句的作用是什么?
- 与try-catch连用,进行善后清理工作。