繁体   English   中英

最终变量与静态最终变量之间的差异

[英]Difference between final variables vs static final variables

我只是在研究最终数据成员,我认为最终变量与静态最终变量的区别是什么?


我知道静态和final字段都只有一个存储空间,而final变量将具有与每个实例相关联的存储空间。

但是,即使我只声明一个final变量,对于所有对象,它仍然是相同的,因为我需要在程序本身而不是在运行时对其进行初始化。


因此,除了与内存有关的问题外,两者之间基本上没有区别。

但是,即使我只声明一个final变量,对于所有对象,它仍然是相同的,因为我需要在程序本身而不是在运行时对其进行初始化。

不可以,非静态最终成员可以在构造函数中初始化。 之后便无法重新分配它们。

final意味着您只能将值赋给变量一次。 final可以在许多范围内使用,并且非常有用,在对象属性中,您必须(并强制)在声明,对象的构造函数或初始化块中设置值。

static是设置变量的范围,这意味着在类属性中,值存储在类内部,并且即使没有对象也可以访问,当您使用static finalfinal static您必须(强制)执行以下操作:在声明上或类的静态初始化代码内设置值。

例:

public class NewClass {

    static final int sc = 123; //I recommend to use this declaration style.
    final static int scc;
    final int o = 123;
    final int oo;
    final int ooo;

    static {
        scc = 123;
    }

    {
        oo = 123;
    }

    public NewClass() {
        ooo = 123;
    }

    void method(final int p) {
//        p=123; //Error, the value is only assigned at the call of the method.

        final int m = 123;
        final int mm;
        mm = 123;
//        mm = 456; //Error, you can set the value only once.
        new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println(m + p); //You still can reach the variables.
            }
        }).start();
    }
}

final变量:声明为final的变量将是一个常量,其值不能更改,并且可以在构造函数中初始化。

静态最终变量:必须在声明过程中或在静态初始化程序块中将其初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM