?关于try…catch中的finally子句:
? 1.在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常,
finally子句必须和try一起出现,不能单独编写
? 2.finally语句通常使用在哪些情况下?
?????? 通常在finally语句中完成资源的释放/关闭。因为finally中的代码比较有保障。
????? 即使try语句块中的代码出现异常,finally中代码也会正常运行。
?import java.io.FileInputStream;
?import java.io.FileNotFoundException;
?import java.io.IOException;
?public class ExceptionTest10{
?? public static void main(String[] args){
?????? FileInputStream fis = null; //声明位置放到try外面,这样在finally中才能用
?????? try{
????????? //创建输入流对象
????????? FileInputStream Fis = new FileInputStream("D:\\course\\01-开课\\学习方法.txt");
?????????
????????? String s = null;
????????? //这里一定会出现空指针异常!
????????? s.toSting();
???????
???????? //流使用完需要关闭,因为流是占用资源的
???????? //即使以上程序出现异常,流也必须要关闭
??????? //放在这里有可能流管不了
??????? // fis.close();
?????? }catch(FileNotFoundException e){
???????? e.printStackTrace();
?????? }catch(IOException e){
????????? e.printStackTrace();
?????? }catch(NullPointerException e){
?????????? e.printStackTrace();
?????? }finally{
?????????? //流的关闭放在这里比较保险
????????? //finally中的代码是一定会执行的
???????? //即使try中出现了异常
?????????? if(fis!=null){ //避免空指针异常!
??????????????? try{
????????????????? //close方法有异常,采用捕捉的方式
????????????????? fis.close();
?????????????? }catch(IOException e){
?????????????????? e.printStackTrace();
????????????? }
???????? }
?????? }
??? }
?}
finally语句
????? 放在finally中的语句块中的代码是一定执行的。
?? public class ExceptionTest11{
???? public static void main(String[] args){
????????? /*
??????????? try和finally,没有catch可以吗?可以
?????????????? try不能单独使用
?????????????? try finally可以联合使用
??????????? 以下代码的执行顺序:
?????????????? 先执行try…
?????????????? 再执行finally….
?????????????? 最后执行return(return语句只要执行方法必然结束)
????????? */
????? try{
???????? System.out.println("try…");
???????? return;
????? }finally{
??????? //finally中的语句会执行。能执行到
??????? System.out.println("finally…");
????? }
?????? //这里不能写语句,因为这个代码是无法执行到的
????? //System.out.println("Hello World");
??? }
}
?public class ExceptionTest02{
??? public static void main(String[] args){
?????? try{
????????? System.out.println("try…");
????????? //退出JVM
????????? System.exit(0); //退出JVM之后,finally语句中的代码就不执行了)
?????? }finally{
??????????? System.out.println("finally…");
?????? }
?? }
}
?final finally finalize有什么区别?
? final关键字
??????? final修饰的类无法继承
??????? final修饰的方法无法覆盖
??????? final修饰的变量不能重新赋值
? finally 关键字
??????? 和try联合使用,finally语句块中的代码是必须执行的
? finalize标识符
??????? 是一个Object类中的方法名
??????? 这个方法是由垃圾回收器GC负责调用的。
? public class ExceptionTest14{
???? public static void main(String[] args){
??????? //final是一个关键字,表示最终的,不变的
??????? final int i=100;
???????
??????? //finally也是一个关键字,和try联合使用,使用在异常处理机制中
?????? //在finally语句块中的代码是一定会执行的。
?????? try{
?????? }finally{
????????? System.out.println("finally…");
??????? }
???????
?????? //finalize()是Object类中的一个方法,作为方法名出现。
?????? //所以finalize是标识符
?????? //finalize()方法是JVM的GC垃圾回收器负责调用
?????? Object obj;
? }