Java 异常与错误
异常
定义:
软件程序在运行过程中,非常可能遇到意外问题,就叫异常(Exception),例如文件找不到,非法参数,网络连接失败等;
异常的分类:
检查性异常:
用户错误或问题引起的异常,例如:打开一个不存在的文件
运行时异常:
运行时被忽略的异常
错误(Error):
错误不属于异常,脱离程序员控制的问题,例如:栈溢出等
异常体系结构:
Java异常可以当做对象来处理
Java异常处理机制:
处理异常
捕获异常
例如:
public class Demo{
public static void main(String[] args){
int a = 6,b = 0;
try{
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("程序发生错误,含有非法参数,除数不能为零");
//e.printStackTrace(); 打印程序捕获到的错误信息
}finally{
System.out.println("程序无论是否发生异常,都会执行finally内的语句");
}
}
}注意:程序中可以用多个catch来捕获,但是有层层递进的关系,捕获需遵循从小到大的递进关系;
抛出异常
方法中处理不了这个异常可以抛给上一级,由上一级捕获处理
public double multiplies(double a,double b) throws ArithmeticException{ //抛出异常
if(b == 0 ){
throw new ArithmeticException(); //主动抛出异常,在方法中使用
}
return a/b;
}
自定义异常
继承Exception类
public class demo extends Exception {
//自定义异常代码,一般还需要重写toString方法
}
总结:
处理运行时异常,采用逻辑去合理规避同时辅助try-catch处理
在多重catch块后面,可以加一个catch(Exception)来处理可能被遗漏的异常
对于不确定的代码,也可以加上try-catch,处理潜在的异常
尽量处理异常,切记只是简单的调用printStackTrace()去打印输出,增加一些处理异常的代码
具体如何处理异常,需根据实际需求和异常类型去决定
尽量添加finally语句块去释放占用的资源