• 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修饰的方法时,运行结果如下所示,提示子类没有重写父类的方法。

  • 相关阅读:
    包介绍、日志模块及深浅拷贝
    一些常用模块
    RE模块(正则)
    软件开发规范
    模块及模块导入
    一些常用的内置函数总结
    迭代器、可迭代对象、迭代器对象
    多层装饰器例子
    闭包函数和装饰器
    递归、二分法、三元表达式及内置函数和匿名函数
  • 原文地址:https://www.cnblogs.com/wgl1995/p/7120998.html
Copyright © 2020-2023  润新知