使用关键字this和Class name访问静态实例变量之间的区别

我有以下java类。当我在构造函数中调用login方法时,我使用类名访问静态实例变量
username
,使用关键字
this
访问静态实例变量
password
。我的问题是这两种方法有什么区别?应该在什么情况下使用哪一个?
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();
    }
}
    
已邀请:
它们都是等价的。 但是,使用
this
访问静态成员具有误导性,应该不惜一切代价避免使用。     
没有不同。 有些人认为应该通过类名来访问
static
字段或方法,而不是通过
this
或实例来强调它是
static
。例如,Eclipse有一个配置设置,用于标记有关通过实例引用访问的静态资源的警告。 我的偏好,按顺序: 在类本身内,我只会在没有限定符的情况下引用该字段 使用类名 如果您觉得字段/方法的静态性质可能会发生变化,那么仅使用
this
或实例,并且这是一个设计细节,它是静态的,类的客户端不应该依赖(在这种情况下,我会考虑制作它一个实例方法,以确保如何访问它)     
在这种情况下没有区别,我认为它被编译为相同的字节码(GETSTATIC)。 但
MyClass.username
是首选,因为它反映了该领域的性质。     
从Java教程:了解实例和类成员:   类变量由引用   类名本身,如      
Bicycle.numberOfBicycles
     这清楚表明它们是   类变量。      注意:您还可以使用对象引用来引用静态字段      
myBike.numberOfBicycles
     但这是令人沮丧的,因为它并没有说清楚它们是什么   类变量。     
您班级的所有实例共享相同的密码;密码属于类,而不是每个实例,这就是静态的意思。 因此,尽管您可以从任何实例访问它,但不建议使用此类用法,因为它表明密码是特定于实例的。     
请记住,静态变量在MyClass的所有实例中共享,因此使用它来引用它们会产生误导。真的,这只是一种风格差异,但你不应该养成用它来引用它的习惯。     
那么,静态变量不是实例变量。因此,静态实例变量不是有效的术语。     
你也不需要使用它们。 因为你有一个内部类,所以你可以直接访问静态变量,而无需显式引用外部类或者它 如果使用静态字段令人困惑,您可以使它们全部大写以区分它们。这通常保留给作为常量的最终静态字段。     

要回复问题请先登录注册