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释放占用的资源

浙公网安备 33010602011771号