(this.static变量)vs(静态变量)

时间:2019-02-28 13:49:47

标签: java

我(认为)静态变量用于您希望类的某些属性在其所有对象之间共享的情况。

class Person{

    private String name;
    private static int qtdone = 0;
    private static int qtdtwo = 0;

    //constructor

    public Person(){
        this.name = "Generic";
        this.qtdone ++;
        qtdtwo++;
    }

    public void print_qtd(){
        System.out.println("this.qtdone is: " + this.qtdone);
        System.out.println("qtdtwo is: " + this.qtdtwo);

    }
}

public class Main {
    public static void main(String [] args) {
        Person one = new Person();
        Person two = new Person();

        one.print_qtd();
    }
}

返回

this.qtdone is: 2
qtdtwo is: 2

这是我期望的,因为qtdone和qtdtwo都被“人称一”和“人称二”修改了

我不确定this.qtdone和qtdtwo之间的区别。他们最终做了同样的事情,但是我想确认他们是否相同,或者实际上是否在做类似(但截然不同)的事情。

2 个答案:

答案 0 :(得分:2)

this.qtdone等效于qtdonePerson.qtdone。但是,不建议将this用于静态访问。

唯一的区别是qtdone可能会被局部变量遮盖。在这种情况下,使用类名进行限定是很有意义的:

setQtDone(int qtdone) {
  Person.qtdone = qtdone;
}

答案 1 :(得分:2)

可以使用this访问静态变量的事实是Java语言的怪异现象。真的没有理由故意这样做。

使用非限定名称qtdone或使用类名称对其进行限定:Person.qtdone

使用this.qtdone 有用,但是看起来它访问实例字段,即使它没有访问。实际上,使用此语法甚至不检查 this是否实际上在引用对象:

Person notReallyAPerson = null;
notReallyAPerson.qtdone++; // this works!