在做一些Java作业时,我通过编写实例方法回答了一个问题,在方法中我使用了属于该方法所属类的一些static final
变量。我编写了静态变量名而没有前缀他们使用班级名称,例如:
for(int i=0; i < MY_STATIC_VARIABLE; i++)
而不是
for(int i=0; i < MyClass.MY_STATIC_VARIABLE; i++)
这使得卷入并正常工作。直到后来我才注意到我忘了在课程名称前加上前缀。我是否包括班级名称是否重要? static final
变量是否在其类的上下文中充当全局变量?
答案 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)
静态和实例变量的不同类型的访问方案。
静态变量可以通过
访问如果它(静态变量)在同一类中意味着,则可以通过 variablename 或 classname.variablename <访问它/ p>
如果它(静态变量)在不同的类中意味着,只能通过 classname.variablename
可以通过
访问实例变量如果它(实例变量)在同一类中意味着它只能由相同类的对象示例 obj.variablename
如果它(实例变量)在不同的类中意味着也必须由不同类的对象示例 obj.variablename
静态变量可以通过
访问如果它(静态变量)在同一类中意味着,则可以通过 variablename 或 classname.variablename <访问它/ p>
如果它(静态变量)属于不同的类意味着,只能通过 classname.variablename
可以通过
访问实例变量如果它(实例变量)在同一类中意味着,则只能通过 variablename 访问它。
如果它(实例变量)在不同的类中意味着也必须由不同类的对象示例 obj.variablename