Java (this.static变量)vs(static变量)

Java (this.static变量)vs(static变量),java,Java,我(认为)当您希望类的某些属性在其所有对象之间共享时,可以使用静态变量 班级人员{ 私有字符串名称; 私有静态int qtdone=0; 私有静态int qtdtwo=0; //建造师 公众人士(){ this.name=“Generic”; 这个.qtdone++; qtdtwo++; } 公共作废打印_qtd(){ System.out.println(“this.qtdone是:“+this.qtdone”); System.out.println(“qtdtwo是:“+this.qtdt

我(认为)当您希望类的某些属性在其所有对象之间共享时,可以使用静态变量

班级人员{
私有字符串名称;
私有静态int qtdone=0;
私有静态int qtdtwo=0;
//建造师
公众人士(){
this.name=“Generic”;
这个.qtdone++;
qtdtwo++;
}
公共作废打印_qtd(){
System.out.println(“this.qtdone是:“+this.qtdone”);
System.out.println(“qtdtwo是:“+this.qtdtwo”);
}
}
公共班机{
公共静态void main(字符串[]args){
第一个人=新人();
第二个人=新人();
一.print_qtd();
}
}
返回

this.qtdone is: 2
qtdtwo is: 2
这正是我所期望的,因为qtdone和qtdtwo同时被“personone”和“persontwo”修改


我不确定的是这个.qtdone和qtdtwo之间的区别。他们最终做了同样的事情,但我想确认他们是相同的,还是事实上做了相似(但不同)的事情

此.qtdone
相当于
qtdone
Person.qtdone
。但是,不建议将此用于静态访问

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

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

使用
this
可以访问静态变量这一事实是Java语言的一个奇怪的怪癖。真的没有理由故意这么做

使用非限定名称
qtdone
或使用类名限定它:
Person.qtdone

使用
this.qtdone
可以工作,但它看起来像是访问了一个实例字段,即使它没有。事实上,使用此语法甚至不会检查
是否确实引用了一个对象:

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

没有区别,
这个
在这里是不必要的和误导的。没有任何区别,但是你应该使用
qtdtwo
而不是
这个。qtdtwo
为了清楚起见,他们在做同样的事情,
this
关键字对于非静态变量和嵌套类很重要。关于何时应该使用
this
请参见此处:@xxxvodnikxxx最好有任何地方可以更新或使用实例变量,但决不能用于静态变量。在这种情况下,它是等效的,在
这种情况下必须提及:)(一旦它是静态的)