Java之异常

异常体系结构

 

Java将异常当作对象处理,并定义一个基类java.lang.Throwable作为所有异常的超类

1、Error

Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者操作无关

Java虚拟机运行错误(Virtual MachineError),当JVM内存不足时,抛出OutOfMemoryError,发生时JVM选择终止线程

还有虚拟机试图执行应用时,可能发生的类定义错误(NoClassDefFoundError),链接错误(LinkageError)

2、Exception

Exception一般是由程序逻辑错误引起的

3、区别

Error是致命的错误,是程序无法控制和处理的,发生时JVM一般选择终止线程;

Exception通常情况下是可以被程序处理的,并在程序中应尽可能去处理这些异常

 

异常处理机制

1、

try{
System.out.println(4/0);
}catch(ArithmeticException e){
System.out.println("较小范围内的异常捕捉");
   e.printStackTrace(); //打印错误的栈信息
}catch(Exception e){
System.out.println("平级或较大范围的异常捕捉");
}finally{
System.out.println("无论是否有异常,都执行finally");
}

2、主动抛出异常,一般在方法中使用

public void test(int b) throws ArithmeticException{     //方法中处理不了时,向上抛出
if(b==0){
throw new ArithmeticException(); //主动抛出异常
}
}

3、自定义异常

public class MyException extends Exception{
//数字大于10,抛出异常
private int detail;

public MyException(int a){
this.detail = a;
}

@Override
public String toString() { //alt+insert,异常打印信息
return "MyException{" +
"detail=" + detail +
'}';
}
}

使用时throw MyException

 

实际应用中的经验总结

1、多次catch时,可以加一个catch(Exception)以处理被遗漏的异常

2、对于不确定的代码,加上try-catch以处理潜在异常

3、catch内可以添加说明信息,而不是简单调用printStackTrace()打印输出

4、尽量添加finally释放占用的资源

posted @ 2021-02-26 02:02  头秃1997  阅读(74)  评论(0)    收藏  举报