zoukankan      html  css  js  c++  java
  • java中final修饰符的使用

    1.final修饰符的用法:

    • final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值。
    • final可以修饰方法,被final修饰的方法不能被重写。
    • final可以修饰类,被final修饰的类不能够被继承。

      上面的这些“语法口诀”对真正掌握final修饰符的用法依然是不够的。

    2.final修饰的变量:被final修饰的实例变量必须显示指定初始值,而且只能在如下三个位置指定初始值:

    • 定义final实例变量时指定初始值。
    • 在非静态初始化块中为final实例变量指定初始值。
    • 在构造方法中为final实例变量指定初始值。

      

    package objectStudy;
    
    public class FinalInstanceVaribaleTest {
        final int var1 = 1;//定义final实例变量时指定初始值。
        final int var2;
        final int var3;
        
        //在非静态初始化块中为final实例变量指定初始值。
        {
            var2 = 2;
        }
        
        // 在构造方法中为final实例变量指定初始值。
        public FinalInstanceVaribaleTest() {
            this.var3 = 3;
        }
        
        public static void main(String[] args) {
            FinalInstanceVaribaleTest finalInstanceVaribaleTest = new FinalInstanceVaribaleTest();
            System.out.println(finalInstanceVaribaleTest.var1);
            System.out.println(finalInstanceVaribaleTest.var2);
            System.out.println(finalInstanceVaribaleTest.var3);
        }
    
    }

       经过编译器的处理,上述三种方式都会被抽取到构造器中赋初始值。

      final类变量只能在两个地方指定初始值:

    • 定义final类变量时指定初始值。
    • 在静态初始化块中为final类变量指定初始值。

    3.final方法不能被重写

    package objectStudy;
    
    class FatherClass {
        public final void info() {
            System.out.println("I am father!");
        }
    }
    
    class ChildrenClass {
        @Override//强制重写父类方法
        public final void info() {
            System.out.println("I am children!");
        }
    }
    
    public class FinalMethodTest {
        
        public static void main(String[] args) {
            ChildrenClass childrenClass = new ChildrenClass();
            childrenClass.info();
        }
    
    }

      上述代码运行结果如下:因为final修饰的类不能够被重写,所以当子类中有和父类中被final修饰的方法名相同的方法是,这只是子类中的一个普通方法,并没有重写父类的方法,但是如果使用@Override注释来强制重写父类中final修饰的方法时,运行结果如下所示,提示子类没有重写父类的方法。

  • 相关阅读:
    C# String 与 byte 互转
    ajax 传值 中文乱码问题
    Js 日期处理
    sqlCacheDependency 更新缓存Cache
    SQL分割字符串,返回临时表
    E:could not get lock /var/lib/dpkg/lock -ope
    YAML-CPP
    [gazebo-1] process has died [pid 22855, exit code 255,
    gperftools对程序进行分析
    pclConfig.cmake or PCLConfig.cmake
  • 原文地址:https://www.cnblogs.com/wgl1995/p/7120998.html
Copyright © 2011-2022 走看看