美文网首页
final和static

final和static

作者: Twinkle_______ | 来源:发表于2016-03-31 23:46 被阅读240次

    经常看到有人在定义常量时,比如:

    // 使用日志框架定义一个logger时
    private static final Logger logger = LoggerFactory.getLogger(BalaService.class);
    
    // 定义常量时
    public final static String SUCCESS_CODE = "200"; 
    

    看别人这样写,自己也模仿着这样写,有时还记不住final static,其实是自己没有明白其真正的含义。
    引用
    http://www.cnblogs.com/dolphin0520/p/3736238.html
    这篇讲final的博客中的一段代码:

    public class Test {
        public static void main(String[] args)  {
            MyClass myClass1 = new MyClass();
            MyClass myClass2 = new MyClass();
            System.out.println(myClass1.i);
            System.out.println(myClass1.j);
            System.out.println(myClass2.i);
            System.out.println(myClass2.j);
     
        }
    }
     
    class MyClass {
        public final double i = Math.random();
        public static double j = Math.random();
    }
    

    运行这段代码j的值是不变的,而i的值是变化的。
    Java类中使用static修饰的,如static初始化代码块,static修饰的变量。Java类在初始化时优先初始化静态变量,静态初始化的变量保存在内存的全局区域,被这个类生成的对象所共享,关于内存的高深细节我现在也不是很明白,等后续跟进吧。

    由上面的代码,j是类相关的变量,i是对象相关的变量。两次new MyClass() j 只会初始化一次,被MyClass生成的对象共享。i 会在一次new MyClass()时就初始化一次,所以 i 是变化的。

    当使用static final去修饰一个变量时:

    • 期望是使用类名去访问这个变量,访问方便;
    • 使用这个变量时,类装载进JVM,只初始化一次,保存在内存的全局区域;
    • 可被多个对象实例共享;
    • final表示这个变量是个常量,不允许被改变。

    关于static和final还有更多的细节,我只捡出工作中遇到的、有疑惑的部分,更多实际有趣的使用,还请你多多分享哦!

    相关文章

      网友评论

          本文标题:final和static

          本文链接:https://www.haomeiwen.com/subject/fxxylttx.html