• 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修饰的变量为全局变量,可通过类名或接口名直接访问,并且在赋值后不能被修改。

  • 相关阅读:
    mysql架构~Orch生产环境部署具体参数
    mysql架构~Orch生产环境部署准备
    iOS苹果内购漏单处理
    iOS13 深色模式与浅色模式适配讲解
    【iOS】音频播放之AVAudioPlayer,AVPlayer,AVQueuePlayer
    iOS 内购遇到的坑
    关于ios平台下的app的充值规则:
    IAP内购审核时注意点和遇到的坑
    PyTorch implementation of the Social-NCE applied to Trajectron++.
    Code accompanying the ECCV 2020 paper "Trajectron++: Dynamically-Feasible Trajectory Forecasting With Heterogeneous Data"
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6113549.html
Copyright © 2020-2023  润新知