2010-12-22 31 views
1

我有以下java类。当我在构造函数中调用登录方法时,我使用类名访问静态实例变量username,使用关键字this访问静态实例变量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(); 
    } 
} 

回答

6

它们都是等价的。
但是,使用this访问静态成员具有误导性,应该不惜一切代价予以避免。

2

在这种情况下没有区别,我认为它被编译为相同的字节码(GETSTATIC)。

但是MyClass.username是首选,因为它反映了该领域的性质。

3

没有区别。

有些人认为应该通过类名称而不是通过this或实例来访问static字段或方法,以突出显示它是static。例如,Eclipse有一个配置设置,用于标记关于通过实例引用访问的静态资源的警告。

我的喜好,依次是:

  • 类本身之内,我只想引用字段,不限定词

  • 使用类名

  • 使用this或实例只有当你感觉字段/方法的静态特性可能会改变时,并且它是一个设计细节,它是类的客户端不应该依赖的静态的(在这种情况下,我会考虑制作它一个实例方法,以确保它如何被访问)

0

您班级的所有实例共享相同的密码;密码到类,不是每个实例,这就是静态的意思。

因此,虽然您可以从任何实例访问它,但不建议使用此类用法,因为它暗示密码是特定于实例的。

1

Java Tutorial: Understanding Instance and Class Members

类变量由 类名本身引用,如

Bicycle.numberOfBicycles

这清楚地表明,他们是 类变量。

注意:您也可以参考静态字段与对象引用类似

myBike.numberOfBicycles

,但并不鼓励,因为它没有说清楚,他们是 类变量。

0

请记住,静态变量在MyClass的所有实例之间共享,因此使用它来引用它们是有误导性的。真的,这只是一种风格差异,但你不应该习惯于用这个来引用它。

0

那么,静态变量不是实例变量。因此,静态实例变量不是有效的术语。

0

你不需要使用。

因为你有一个内部类可以直接访问静态变量没有明确提及外部类或本

如果使用静态字段是混乱的,你可以让他们全部大写字母来区分他们。通常这是保留给作为常量的最终静态字段。

相关问题