zoukankan      html  css  js  c++  java
  • 1-17finally关键字

    finally的特点

    被finally控制的语句体一定会执行,除非在执行finally语句体之前JVM退出(比如System.exit(0)),一般用于关闭资源

    finally如何使用?

    finally语句块可以直接和try语句块联用:try….finally…(这种用的比较少)
    也可以这样使用:try…catch….finally

    package com.monkey1024.exception;
    
    public class FinallyTest01 {
    
        public static void main(String[] args) {
    
            try {
                System.out.println(1024 / 0);
            } catch (ArithmeticException e) {
                e.printStackTrace();
            } finally{
                System.out.println("finally中的内容");
            }
        }
    
    }
    

    即使在方法里面执行了return,finally中的代码也会执行

    package com.monkey1024.exception;
    
    public class FinallyTest02 {
    public static void main(String[] args){
    
            int i = m1();
            System.out.println(i); 
    
        }
    
        public static int m1(){
    
            int i = 10;
            try{
                return i;
            }finally{
                System.out.println("finally中的语句");
            }
    
        }
    
    }
    

    只有当finally语句执行之前,JVM退出了,finally才不会执行:

    package com.monkey1024.exception;
    
    public class FinallyTest02 {
    public static void main(String[] args){
    
            int i = m1();
            System.out.println(i); 
    
        }
    
        public static int m1(){
    
           try {
               int i = 1024;//try里面的变量在外部是无法被访问的
               System.exit(0);//让jvm退出,所以finally中的语句不会执行
               return i;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("finally中的语句");
            }
           return 10;
           // System.out.println(i);无法访问i,因为i是在try中声明的
    
        }
    
    }
    

    小练习

    1.下面程序的打印结果是什么?

    package com.monkey1024.exception;
    
    public class FinallyTest03 {
    public static void main(String[] args){
    
            int i = m1();
            System.out.println(i); 
    
        }
    
        public static int m1(){
    
            int i = 10;
            try{
                return i;
             //这里没有catch,所以不用在后面写return了
            }finally{
                i++;
                System.out.println("finally中的i=" + i); 
            }
    
        }
    
    }
    

    2.final,finally和finalize的区别?

    答案

    1.程序在执行到return i时,会先将i赋给一个临时变量,return的是这个临时变量:int temp = i;return temp;,然后再执行finally中的语句,打印出了11,之后再执行main方法中的语句,打印出10。

    2.这三个关键字其实没有什么关系,只不过在单词的拼写上面相似。

    final
    final可以修饰类,不能被继承
    修饰方法,不能被重写
    修饰变量,只能赋值一次
    finally是try语句中的一个语句体,不能单独使用,语句体中的语句一定会执行
    finalize是Object中的一个方法,当没有引用指向这个对象时,由对象的垃圾回收器在回收之前调用此方法。

  • 相关阅读:
    HDU 2122 HDU Today(dijkstra+map)
    DEDECMS后台传附件图片出现Upload filetype not allow解决办法
    织梦dedecms如何显示所有文章列表
    dedeCMS标签调用技巧和大全
    dedecms二次开发总结 变量参数
    dedecms上传图片相对路径改成绝对路径方法
    织梦Dedecms网站后台无法上传图片的步骤详解
    dedecms列表页调用当前文档的tags并带链接
    dedecms 自动获取缩略图
    dedecms网站转移(更换空间转移数据方法)
  • 原文地址:https://www.cnblogs.com/superfly123/p/10444268.html
Copyright © 2011-2022 走看看