main函数处理异常的方式:
main函数会将异常对象抛给它的调用者JVM,JVM会将异常名称,异常的描述信息,异常出现的位置打印在控制台。
并且终止程序的运行。
自己处理异常:
抛:throws
throw:
定义在方法内部,表示抛出异常,
后边跟的是异常对象,并且同时只能跟一个异常对象。
抛出的异常对象可以由方法内部的语句处理。
throws:
定义在方法的声明上,表示 声明抛出异常
后边跟的是异常类名,可以跟多个,中间由逗号隔开
抛出的异常由方法的调用者处理。
try-catch-finally
格式:
处理单个异常
try{
//可能出现问题的代码
}catch(异常类型 变量名){ // Exception e
//出问题后的解决方案 // e.printStackTrace();
}finally{
//释放资源
}
//try处理多个异常,大的异常类型应该写后边。
处理多个异常:
try{
//可能出现问题的代码
}catch(异常类型1 变量名1){
//出问题后的解决方案
}catch(异常类型2 变量名2){
//出问题后的解决方案
}catch(异常类型3 变量名3){
//出问题后的解决方案
}
.......
finally{
//释放资源
}
JDK1.7以后,多个异常类型可以合并,格式如下:
try{
//可能出现问题的代码
}catch(异常类型1 | 异常类型2 | 异常类型3 变量名){
//出问题后的解决方案
}finally{
//释放资源
}
实际开发的写法:
try{
//可能出现问题的代码
}catch(Exception e){
e.printStackTrace();
}finally{
//释放资源
}
finally:
它是一个关键字,也是try-catch-finally语句体的一个模块,
正常情况下里边的代码永远会执行,一般是用来释放资源的。
//特殊情况:还没有执行到finally的时候,jvm已经关闭了。
异常的注意事项:(子类重写父类方法时) //记一个原则就OK了,父亲坏了,儿子不能更坏。
A:子类不能抛父类没有的异常。
//子类只能抛 父类方法异常的 子类异常或者相同异常。
B:父类方法没有抛异常,子类方法有异常只能try,不能抛。
C:代码中出现异常了,能try就try,try不了就抛。
Throwable:
getMessage(); //获取异常的描述信息
toString(); //获取异常的描述信息以及异常的名称
printStackTrace(); //获取异常的描述信息,异常的名称以及异常出现的位置
自定义异常:
其实就是自己定义一个类去继承Exception或者是RuntimeException。
别忘了定义一个空参构造以及一个带String参数的构造。 |
|