try..catch和finally
由于发生异常,导致程序异常终止,java提供了对异常进行处理的方式---捕获异常
try{
可能出现问题的代码 //这里的代码越少越好,因为他是异常,会走异常处理机制,JVM会开辟新的资源管理他,代码越多,开辟的资源越多,造成资源浪 费
}catch(异常名 变量){
针对问题的处理 //这里必须要有代码,否则就显得用try.. catch没有意义
}finally{
释放资源
}
try代码块中的程序发生了异常,系统会将这个异常的信息封装成一个异常对象,并将这个对象传递给catch代码块。catch代码块需要一个参数指明它所能接受的异常类型,这个参数类型必须是Exception类及其子类
在try代码块中,发生异常语句后面的代码是不会被执行的,就有了finally代码块,不论是否程序发生异常或使用return语句,finally代码块都会执行
try{
可能出现问题的代码
可能出现问题的代码
}catch(异常名 变量){ //可以用多个catch代码块执行处理多个异常,
针对问题的处理
}catch(异常名 变量){
针对问题的处理
}catch(Exception 变量){ //对于不清楚的异常可以用Exception,知道的异常尽量明确,如果出现子父关系的异常,父类异常必须在后
针对问题的处理
}finally{
释放资源
}
2、在JDK7出现了一个新的异常处理方案
try{
}catch(异常名 | 异常名2 | ...变量){
..
}
注意:处理方式是一致的
异常类型必须是平级关系
3、有些异常我们处理不了,就提供了另一种处理方案 抛出
格式:throws 异常类名,可以抛出多个异常
注意:这个格式必须跟在方法的后面,是为了告诉调用者有异常,不要在main方法后抛出异常
抛出异常就代表不处理,谁调用谁去处理,但是如果抛的是编译期异常,调用者要去处理,而运行期异常,调用者不需要处理,但想处理的话也可以处理
4、throws用在方法声明后面,跟的是异常类名,
可以跟多个异常,用逗号隔开
表示抛出异常,由该方法调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw表示抛出了异常,一定抛出了某种异常,抛出编译期异常,还要去处理,在方法声明后,在方法调用者那里处理
4、原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,用throws
System.exit(0)表示退出当前的虚拟机,Java虚拟机停止了,任何代码都不会再执行了
final,最终的意思,可以修饰类,成员变量,成员方法
修饰类,类不能被继承
修饰变量 ,变量是常量
修饰方法,方法不能被重写
finally:是异常处理的一部分,用于释放资源
一般来说。代码肯定会执行,特殊情况,在执行到finally之前Jvm退出了
finalize:是Object类的一个方法,用于垃圾回收
5、如果catch里面有return语句,请问finally里面的代码会执行吗
会,在return前
6、子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类
如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子类,子类不能抛出父类没有的异常
如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能用try,不能用throws
发生异常时,程序不会向下执行,加上try...catch会向下执行。但是发生异常语句后面语句不会执行,加上finally
浙公网安备 33010602011771号