zoukankan      html  css  js  c++  java
  • static final

    static详见静态与非静态

    final详见final详解


    变量和方法

    注意:

    1、static final修饰的变量必须在声明时初始化。

    2、static final修饰的变量赋值后不能修改。

    3、static final修饰的方法不能被子类重写。

    4、抽象类中的抽象方法不能被static、final或static final修饰。

    5、接口中的所有方法都不能被static、final或static final修饰,因为接口中的方法都是抽象的。

    6、接口中的变量默认为public static final。

    在普通类中:

    public class ClassA {
        public static final String S1 = "this is S1 in ClassA";
    
        public static final String method1() {
            return "this is method1 in ClassA";
        }
    }

    测试1:

    public class MainClass {
        public static void main(String[] args) {
            ClassA a = new ClassA();
            System.out.println(ClassA.S1);// this is S1 in ClassA
            System.out.println(ClassA.method1());// this is method1 in ClassA
            System.out.println(a.S1);// this is S1 in ClassA
            System.out.println(a.method1());// this is method1 in ClassA
        }
    }

    MainClass反编译:

    public class MainClass
    {
      public static void main(String[] args)
      {
        ClassA a = new ClassA();
        System.out.println("this is S1 in ClassA");
        System.out.println(ClassA.method1());
        System.out.println("this is S1 in ClassA");
        System.out.println(ClassA.method1());
      }
    }

    在抽象类中: 

    public abstract class ClassA {
        public static final String S1 = "this is S1 in ClassA";
    
        public static final String method1() {
            return "this is method1 in ClassA";
        }
    }

    测试2:

    public class MainClass {
        public static void main(String[] args) {
            System.out.println(ClassA.S1);// this is S1 in ClassA
            System.out.println(ClassA.method1());// this is method1 in ClassA
        }
    }

    MainClass反编译:

    public class MainClass
    {
      public static void main(String[] args)
      {
        System.out.println("this is S1 in ClassA");
        System.out.println(ClassA.method1());
      }
    }

    在接口中:

    interface InterfaceA {
        static final String S1 = "this is S1 in InterfaceA";
    }

    测试3:

    public class MainClass {
        public static void main(String[] args) {
            System.out.println(InterfaceA.S1);// this is S1 in InterfaceA
        }
    }

    MainClass反编译:

    public class MainClass
    {
      public static void main(String[] args)
      {
        System.out.println("this is S1 in InterfaceA");
      }
    }

    从以上测试中,可以得出:

    1、static final修饰的变量在编译时直接被值替换。

    2、通过对象访问普通类中的static final方法时,在编译时被优化为通过类名来访问。

    3、static final修饰的变量为全局变量,可通过类名或接口名直接访问,并且在赋值后不能被修改。

  • 相关阅读:
    Github 上热门的 Spring Boot 项目实战推荐
    深入理解建造者模式 ——组装复杂的实例
    别死写代码,这 25 条比涨工资都重要
    Spring Boot 使用 JWT 进行身份和权限验证
    秋招打怪升级之路:十面阿里,终获offer!
    一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token
    适合新手入门Spring Security With JWT的Demo
    面试官:“谈谈Spring中都用到了那些设计模式?”。
    春夏秋冬又一春之Redis持久化
    Mysql锁机制简单了解一下
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6113549.html
Copyright © 2011-2022 走看看