我有以下java类。当我在构造函数中调用login方法时,我使用类名访问静态实例变量username
,使用关键字password
访问静态实例变量this
。我的问题是这两种方法有什么区别?在什么情况下应该使用哪一个?
public class MyClass {
private Main main;
private static String username = "mylogindetails";
private static String password = "mypassword";
public MyClass(){
this.main = new Main();
this.main.login(MyClass.username, this.password);
}
public static void main(String args[]){
MyClass myclass = new myclass();
}
}
答案 0 :(得分:6)
它们都是等价的
但是,使用this
访问静态成员具有误导性,应该不惜一切代价避免使用。
答案 1 :(得分:3)
没有区别。
有些人认为应该通过类名访问static
字段或方法,而不是通过this
或实例,以突出显示它是static
。例如,Eclipse有一个配置设置,用于标记有关通过实例引用访问的静态资源的警告。
我的偏好,按顺序:
,我只会引用没有限定符的字段
使用班级名称
仅当您认为字段/方法的静态特性可能发生变化时才使用this
或实例,并且该类的客户端不应依赖静态设计细节(在这种情况下,我会考虑将其作为实例方法,以确保如何访问它。
答案 2 :(得分:2)
在这种情况下没有区别,我认为它被编译为相同的字节码(GETSTATIC)。
但MyClass.username
是首选,因为它反映了该领域的性质。
答案 3 :(得分:1)
来自Java Tutorial: Understanding Instance and Class Members:
类变量由引用 类名本身,如
Bicycle.numberOfBicycles
这清楚表明它们是 类变量。
注意:您还可以使用像
这样的对象引用来引用静态字段
myBike.numberOfBicycles
但这是不鼓励的,因为它没有说清楚它们是什么 类变量。
答案 4 :(得分:0)
您班级的所有实例共享相同的密码;密码属于到类,而不是每个实例,这就是静态的含义。
因此,尽管您可以从任何实例访问它,但不建议使用此类用法,因为它表明密码是特定于实例的。
答案 5 :(得分:0)
请记住,静态变量在MyClass的所有实例中共享,因此使用它来引用它们会产生误导。真的,这只是一种风格差异,但你不应该养成用它来引用它的习惯。
答案 6 :(得分:0)
嗯,静态变量不是实例变量。因此,静态实例变量不是有效的术语。
答案 7 :(得分:0)
您也不需要使用。
因为你有一个内部类,你可以直接访问静态变量,而不需要显式引用外部类或者这个
如果使用静态字段令人困惑,您可以将它们全部上限以区分它们。这通常保留给作为常量的最终静态字段。