异常分类
什么异常
- 异常就是出现错误的情况
为什么需要异常
- 我们要对异常进行捕获处理,提高我们软件的安全性和健壮性
异常分类
- 异常也是一个对象
异常对象
Throwable 当出现问题的时候 程序终止 错误或异常下面的语句不在执行
|–Error 由于运行程序的环境出现的问题
比如:JVM出现了问题。
大多数是以Error结尾
我们不需要处理
|–Exception 程序内部出现了问题,我们需要解决处理
|— RuntimeException
运行时出现的异常,编译期间不出现问题
是不需要手动处理
例如:1/0
|—MyCheckException
在编译期间出现的异常,需要程序员,手动处理
我们开发处理的异常,就是MyCheckException
(非RuntimeException )RuntimeException 不需要处理
出现RuntimeException,说明程序不严谨,也就是程序员的问题
让程序员根据出现的异常,去让程序更严谨些。MyCheckedException
是因为有些东西程序员不能准确的把握, 好比要在系统的Z:盘上读取文件
Z:盘 程序员无法控制
异常对象的常用方法
- getMessage()可以直接输出异常名称
- printStactTrace()输出的不只是名称,还有其他的详细信息
处理异常
- try…catch
- try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理
try…catch…finally
- 不论是否出现异常都会执行到finally
常见异常
注意事项
- 多个异常如果有继承关系,将父类放在最后的catch内
throw、throws
throws 通常在声明方法时用来指定可能抛出的异常
public void test() throws NullPointerException { }
throw 通常在方法中抛出一个异常对象
public void test() { throw new NullPointerException(); }
1、一个图
2、五个关键字 try catch finally throws throw
3、使用总结
第一种方式 手动捕获异常 并进行处理
1、手动捕获异常 自己进行处理 try catch
try{
//可能会产生异常的语句
}catch(Exception e){ //捕获产生的异常对象
// 对产生的异常 进行处理的语句
}
如果try语句块中 没有产生异常 则 catch不执行 否则会到相应的catch中 进行处理
2、 手动捕获异常 自己进行处理 try catch finally
try{
//可能会产生异常的语句
}catch(Exception e){ //捕获产生的异常对象
// 对产生的异常 进行处理的语句
} finally {
// try语句块中 无论 是否 有异常产生 都会执行 里面的语句
// 主要用于关闭 系统的资源 和 网络连接
}
注意: catch 和 finally 都不能各自单独存在
因为 catch用于捕获异常 并进行处理 finanlly 无论是否有异常都执行
第二种处理异常的方式
系统利用throws 将异常抛出 谁调用谁处理
public void get() throws Exception { }
第三种处理异常方式 手动抛出异常 throw
a、找到一个合适的异常类
b、创建该异常类的对象 修改异常提示信息
c、 throw手动 将自己创建的 异常对象抛出
public void get(int a){
if(a<0){
throw new ArithmeticException("不能为负数");
}else if(a==0){
throw new ArithmeticException("不能为0");
}else{
System.out.println( 1/ a);
}
}
第四种处理异常方式 自定义异常
a、创建一个 Exception 或 RuntimeException的子类
b、创建两个构造器 一个没有参数 一个含有String类型参数的 构造器
一般情况下 自定义异常 和 手动抛出一起使用