文章目录
异常时java程序在运行时发生的错误
1.异常的分类
基于运行状态分类
异常分为运行时异常和编译时异常。
编译的异常我们需要处理,否则程序无法运行。
运行时异常,RuntimeException及其子类都是,这种异常不用处理,编译会通过,不过这样的程序会有安全隐患,遇到这种异常是需要改代码的
Error,通常需要对程序进行修正
基于操作分类
2.异常的处理
异常的处理方式主要有两种,try…catch()…fianlly或者throws,接下来将详细分析这两者的区别。
(一)捕获异常try…catch…finally
try:是用来异常的检测
catch:是用来捕获异常
finally:是用来结束资源
如果try语句中抛出了catch子句中声明的异常类
1)try块中余下的语句将不再执行
2)程序执行catch中的处理代码
1)捕获多个异常
try{
..
}catch(FileNotFoundException e){
..
}catch(IOException e){
..
}catch(UnknownHostException e){
..
}
当多个catch捕获不同类型的异常种类试,如果捕获到一个种类的,后续的catch将不再执行
2) 获取异常的更多信息
try{
}catch(Exception e){
e.getmessage()
e.printStackTrace()
}
3)合并不同类型的异常
在JavaSE7中catch可以合并不同类型的异常执行同一个子句
try{
}catch(IOException |FileNotFoundException e){
..
}
(二)throws声明异常
使用throws,什么也不用做。通过将异常传递给调用者(推卸责任),让调用者去操心!
如果调用者调用了一个抛出异常的方法,就必须处理或者继续传递(甩锅),最终由jvm来处理,即打印异常消息和堆栈信息。
throws声明了方法体内有可能会抛出异常,但不一定发生。throws在方法声明后,throws后面跟的是异常类名
1)throws&throw傻傻分不清楚
throw是用于方法体内的,具体于某个位置。执行了throw表示一定发生了
属于我们手动调用抛出的异常
if(age>50){
..
}else{
throw new Exception("年龄不能超过50")
}
2)而throws用于声明这个方法体内有抛出异常的可能,调用该方法的调用者需要做好处理异常的准备
public ststic void main(String[] args){
try{
method()
}catch(Exception e){
e.printStackTrace()
}
}
public static void method() throws Execption{
if(age>50){
..
}else{
throw new Exception("年龄不能超过50")
}
}