将final数值定义为static和非static的区别

解决方案 »

  1.   

    此区别只有在运行期内被初始化时才会显现,这是因为编译器对编译期数值一视同仁。当你运行程序时,就会看到这个区别。定义为final,只说明它是一个常量,每次创建对象时都初始化。而定义为  static final 是恒定初始值(即编译期常量),在装载时已被初始化,不可以通过创建新对象而加以改变。——Thinking in java
      

  2.   

    final 故名思议不可变,最终。
    static 就是 静态。 简单说 类中的成员,Static 修饰就是类共享。 没有就是 每个实例来一份。
      

  3.   

    纠正一个严重的错误认知,Java中的final不是常量定义,java源代码语法中是没有常量定义的概念的,而且java中的常量还是个比较复杂的东西。
      

  4.   

    还有,常量都是编译期就赋值的。还有,类初始化就装载和编译期不是一个概念,它们区别大了。最后告诉楼主,think in java这本书其实挺坑人的,说他是基础的书,它有讨论底层的一些东西,说他深入但是又不从jvm的基本原理入手,总是胡扯一些概念,毒害新手。