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

  • 相关阅读:
    19 SSM整合,SSM框架快速搭建
    18 MyBatis——多表查询
    17 MyBatis——ResultMap的使用、字段名冲突问题
    97 Eclipse的tomcat修改代码自动重启服务器功能的关闭
    27 Maven报错解决
    16 MyBatis——缓存
    Linux VPS搭建蚂蚁笔记Leanote私有云笔记存储平台
    CentOS7 安装记录
    Linux学习笔记之一
    mr-robot靶机练习
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6113549.html
Copyright © 2011-2022 走看看