为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼啦一阵风 2022-07-14 17:19:28
当您希望在其所有对象之间共享类的某些属性时,我(认为)使用静态变量。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: 2qtdtwo is: 2这是我所期望的,因为 qtdone 和 qtdtwo 被“人一”和“人二”修改我不确定 this.qtdone 和 qtdtwo 之间的区别。他们最终做了同样的事情,但我想确认他们是否相同,或者实际上是在做类似(但不同)的事情。
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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

要么使用不合格的名称qtdone,要么使用类名来限定它:Person.qtdone.

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

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


查看完整回答
反对 回复 2022-07-14
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

this.qtdone等价于qtdone或Person.qtdone。但是this不推荐使用静态访问。


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


setQtDone(int qtdone) {

  Person.qtdone = qtdone;

}


查看完整回答
反对 回复 2022-07-14
  • 2 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信