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

posted @ 2021-05-03 16:06  小辉同学学Java  阅读(148)  评论(0)    收藏  举报