1、异常介绍
Throwable是所有异常的超类
类型 | 描述 |
---|---|
Error | 严重错误不该捕获,应该直接崩溃,如内存溢出 |
Exception ↓ | 可以预知和弥补的无关紧要的错误,如除以0 |
RuntimeException | 编译时不检查,出现问题后自己处理 |
非RuntimeException | 编译时就要处理,否则无法通过编译 |
JVM会把异常信息在控制台显示出来,然后杀掉程序
2、try…catch…捕获异常
try下面是可能产生异常的代码,在catch异常的时候要从小到大,先找具体异常,再用大的异常兜底
try{
int a = 10/0;
}catch(DivideByZeroException e){
e.printStackTrace();//打印异常信息
System.out.println(e.getMessage());
System.out.println(e.toString());
}catch(Exception e){
e.printStackTrace();//打印异常信息
System.out.println(e.getMessage());
System.out.println(e.toString());
}finally{
System.out.println("异常结束");
}
3、throws抛出异常
throws的意思是可能会出现异常需要抛出,不证明一定会有异常
写在函数声明后面,出现异常了就抛出去,在外面还是需要catch
团队开发,如果这个异常是调用者的问题,就可以把异常扔出去给他处理(甩锅)
public int divide(int a, int b) throws DivideByZeroException {
int c = a/b;
return c;
}
try{
int d = divide(10, 0);
}catch(DivideByZeroException e){
e.printStackTrace();
}
4、自定义异常
如果你不喜欢7这个数,定义一个“我不喜欢7的异常”,继承RuntimeException
自己定义的异常要自己判断异常出现条件并且手动去抛出 throw
class IdontLikeSevenException extends RuntimeException{
public IdontLikeSevenException(){};
public IdontLikeSevenException(String message){
super(message);//让Throwable去构造
};
}
try{
int a = Math.round(Math.random()*10);//生成0~10的随机整数
if(a==7)
throw new IdontLikeSevenException("我不喜欢7,我觉得不行。");//抛出自己的异常
}catch(IdontLikeSevenException e){
e.printStackTrace();
}
test.IdontLikeSevenException
at test.HelloWorld.main(HelloWorld.java:17)