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中的一个方法,当没有引用指向这个对象时,由对象的垃圾回收器在回收之前调用此方法。

  • 相关阅读:
    SharePoint 2013 中的SQL Server 安全
    SharePoint 2013 的HTML5特性之响应式布局
    SharePoint 2013 一些小技巧
    SharePoint 2013 排错之"Code blocks are not allowed in this file"
    SharePoint 2013 创建搜索中心及搜索设置
    SharePoint 2013 使用PowerShell创建State Service
    SharePoint 2013 内容部署功能简介
    SharePoint 使用PowerShell恢复误删的网站集
    SharePoint 自定义WebPart之间的连接
    linux之misc及使用misc创建字符设备
  • 原文地址:https://www.cnblogs.com/superfly123/p/10444268.html
Copyright © 2011-2022 走看看