我(认为)静态变量用于您希望类的某些属性在其所有对象之间共享的情况。
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之间的区别。他们最终做了同样的事情,但是我想确认他们是否相同,或者实际上是否在做类似(但截然不同)的事情。
答案 0 :(得分:2)
this.qtdone
等效于qtdone
或Person.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!