为什么在引用静态变量时包含类名?

时间:2011-07-20 08:28:12

标签: java variables static

在做一些Java作业时,我通过编写实例方法回答了一个问题,在方法中我使用了属于该方法所属类的一些static final变量。我编写了静态变量名而没有前缀他们使用班级名称,例如:

for(int i=0; i < MY_STATIC_VARIABLE; i++)

而不是

for(int i=0; i < MyClass.MY_STATIC_VARIABLE; i++)

这使得卷入并正常工作。直到后来我才注意到我忘了在课程名称前加上前缀。我是否包括班级名称是否重要? static final变量是否在其类的上下文中充当全局变量?

7 个答案:

答案 0 :(得分:8)

  

我是否包含课程名称是否重要?

对于您的老师,未来的人们可能会在您最终工作的公司中查看代码。但也许不是 - 如果我正在审查您的代码,我建议在这种情况下省略类名。

对于编译器,不,没关系。

  

静态最终变量是否在它的类的上下文中充当全局变量?

当然可以

答案 1 :(得分:4)

  

static final变量在类的上下文中是否像全局变量一样?

是的,所有static类级别成员都可以在整个类的代码(final或其他)中访问,并且不需要以类名作为前缀。包括与否是一种风格偏好。

不太明显的是,在实例方法中,您可以使用this.MY_STATIC_VARIABLE并且编译器会非常满意,即使MY_STATIC_VARIABLE不是实例字段。 (使用公共静态字段,您可以使用任何实例引用,而不仅仅是this。)您可以使用static方法执行相同的操作。但是对于阅读代码的人来说,这是非常误导的。 :-)在技术上仍然是一种风格偏好,但我强烈建议反对它。只要提到它,以防你最终阅读看起来必须有错误的代码。

答案 2 :(得分:3)

就像乔伊已经说过的那样,如果你在课堂上,你可以不受限制地访问它。但是,如果你是从另一个类使用它,那么你应该使用classname而不是实例来访问它,以明确它是一个静态变量/常量。

MyClass instance = new MyClass();
instance.MY_STATIC_VARIABLE //not good
MyClass.MY_STATIC_VARIABLE  //good

答案 3 :(得分:1)

它编译得很好,因为 - 正如你所知 - 静态最终变量属于同一个类。这意味着变量位于代码的“范围”中。如果包含前缀,则无关紧要。只有当你想从另一个类中访问静态变量作为当前变量时,你必须说明变量所在的类。

这跟this或不同。例如:

private String secret;
public String getSecret()
{
    return this.secret;
}

private String secret;
public String getSecret()
{
    return secret;
}

这是完全一样的。

答案 4 :(得分:1)

除了评论者的观点(即使你将来:-)),保留类名前缀以便在需要时进行快速重构也是很好的。它将为您提供源代码所需的更改。考虑一下!

答案 5 :(得分:1)

澄清我的意见:

import static java.math.BigDecimal.TEN;
...

public class Foo {

    private static int COUNT = 0;
    private static BigDecimal FIVE = new BigDecimal(5);
    private BigDecimal height;

    public void bar() {
        height = null; // Good
        this.height = null; // Unnecessary qualification

        COUNT++; // Good
        Foo.COUNT++; // Unnecessary qualification

        height = TEN; // Fine
        height = BigDecimal.TEN; // Fine
        height = Foo.FIVE; // Fine; increases clarity by distinguishing it from similar imported static variables
        height = FIVE; // Fine; perhaps the additional clarification is unnecessary
    }
}

答案 6 :(得分:1)

  

静态和实例变量的不同类型的访问方案。

一边是静态方法

  • 静态变量可以通过

    访问
    1. 如果它(静态变量)在同一类中意味着,则可以通过 variablename classname.variablename <访问它/ p>

    2. 如果它(静态变量)在不同的类中意味着,只能通过 classname.variablename

    3. 访问它
  • 可以通过

    访问实例变量
    1. 如果它(实例变量)在同一类中意味着它只能由相同类的对象示例 obj.variablename

    2. 如果它(实例变量)在不同的类中意味着也必须由不同类的对象示例 obj.variablename

一边是实例方法(非静态方法)

  • 静态变量可以通过

    访问
    1. 如果它(静态变量)在同一类中意味着,则可以通过 variablename classname.variablename <访问它/ p>

    2. 如果它(静态变量)属于不同的类意味着,只能通过 classname.variablename

    3. 访问它
  • 可以通过

    访问实例变量
    1. 如果它(实例变量)在同一类中意味着,则只能通过 variablename 访问它。

    2. 如果它(实例变量)在不同的类中意味着也必须由不同类的对象示例 obj.variablename