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

时间:2012-06-01 04:05:56

标签: java

我刚刚研究了最终数据成员,我认为最终变量与静态最终变量有什么不同?


据我所知,静态和最终的字段只有一个存储空间,而最终变量的存储空间与每个实例相关联。

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


那么,除了与内存相关的问题外,两者基本没有区别?

3 个答案:

答案 0 :(得分:12)

  

但即使我宣布变量只是最终变量,它仍然是相同的   对于所有对象,我需要在程序本身初始化它们   而不是在运行时间。

不,可以在构造函数中初始化非静态最终成员。之后不能再重新分配。

答案 1 :(得分:2)

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

static是设置变量的范围,这意味着在类属性中该值是类中的存储,并且当您使用static final时,即使没有对象也可以访问或者final 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();
    }
}

答案 2 :(得分:1)

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

static final variable:必须在声明期间或在静态初始化程序块中初始化它。