• 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
    对象要死亡

  • 相关阅读:
    mysql小记
    mysql多实例安装
    源码编译安装mysql
    url监控
    ping命令的用法大全!
    JSON结构
    <a href="onclick="javascript:goSearch(this)" class="click" name="Java">Java</a>为什么a标签的父节点获取不到
    处理jquery版本之间冲突
    C# 语言如何获取json格式的数据,不用javascript用c#实现。。。
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9373927.html
Copyright © 2020-2023  润新知