zoukankan      html  css  js  c++  java
  • java中final、finally、finalized使用方法

    首先需要明白  final和finally是关键字,finalize是一个方法。

    1. final关键字

      final可以修饰类、方法、变量,

    • 修饰类表示类不可以被继承
    • 修饰方法表示此方法不可以被重写(覆盖)但是可以被重载
    • 修饰变量表示变量不可变(引用不可变--也就是不可以重新指向另一个对象,但是引用内容可以变),而且static final 经常用作常量处理。
    package cn.qlq.fina;
    /**
     * final 关键字使用
     * @author Administrator
     *
     */
    public class TestCla {
        
        private static final int a = 1;
        
        private static final User u = new User();;
    
        public static void main(String[] args) {
            // a = 2;// final修饰的变量不可改变(引用不可变)
            
            // u=new User();//引用不可变,不可再指向其他对象,但是引用内容可以改变
            
            u.setUsername("sssssss");
            u.setUsername("XXXXXXX");
        }
        
        public void test1(final int x ){
    //        x=1;//final修饰的变量不可改变,方法上的形参也不可以变
        }
    }

    2.finally的使用:---通常用于try..catch..之后关闭一些IO流等操作

    1. try语句没有被执行,如在try语句之前就返回了,这样finally语句就不会执行;因此说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

    2. 如果在try代码块中执行System.exit(0)语句;那么将终止Java虚拟机JVM,因此,finally语句也不会被执行到。

    3. finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中return已经确定的返回值,如果返回值类型为传址类型,则影响;传值类型,则不影响。若finally里也有return语句则覆盖try或catch中的return语句直接返回。

    测试代码:

    package cn.qlq.test;
    
    /**
     * 
     * @author Administrator
     *
     */
    public class MyTest {
    
        public static final int i = 6;
    
        @SuppressWarnings("finally")
        public static long test1() {
            String val = "5d";
            long value = 5;
            try {
                value = Long.parseLong(val);
            } catch (NumberFormatException e) {
                System.out.println("catch...");
                return value++;
            } finally {
                System.out.println("finally...");
                value--;
                return value;
            }
        }
        
        public static void main(String[] args) {
            System.out.println(MyTest.test1());
        }
    }

    结果:

    catch...
    finally...
    5

    3.finalize()析构方法的使用

      finalize()在JVM回收对象的时候会调用该对象的此方法,用于垃圾回收的时候处理一些事情。

    package cn.qlq.test;
    
    /**
     * 
     * 测试finalize()方法,对象消亡的时候调用的方法,类似于C++的析构函数
     * @author Administrator
     *
     */
    public class MyTest {
    
        public static final int i = 6; 
        
        @Override
        protected void finalize() throws Throwable {
            System.out.println("对象要死亡");
        }
        @SuppressWarnings("finally")
        public long test1() {
            String val = "5d";
            long value = 5;
            try {
                value = Long.parseLong(val);
            } catch (NumberFormatException e) {
                System.out.println("catch...");
                return value++;
            }finally {
                System.out.println("finally...");
                value--;
                return value;
            }
        }
    
        public static void main(String[] args) {
            MyTest my = new MyTest();
            System.out.println(my.test1());
            my = null;//清空对象的引用,使其被垃圾回收
            System.gc();//调用GC回收垃圾
        }
    }

    结果:

    catch...
    finally...
    5
    对象要死亡

  • 相关阅读:
    oracle sql语句
    Block
    Bug调试
    Xcode 项目文件介绍
    Mac终端命令
    Objective-C命名编写规范
    2014-07-23 .NET实现微信公众号接入
    2014-07-22 如何成为一名合格的职业人士
    3、C# 文件处理工具集
    2、C# 编码/加密工具集
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9373927.html
Copyright © 2011-2022 走看看