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

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


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 之间的区别。他们最终做了同样的事情,但我想确认他们是否相同,或者实际上是在做类似(但不同)的事情。


呼啦一阵风
浏览 97回答 2
2回答

慕姐8265434

可以使用访问静态变量的事实是thisJava 语言的一个奇怪的怪癖。真的没有理由故意这样做。要么使用不合格的名称qtdone,要么使用类名来限定它:Person.qtdone.使用this.qtdone 有效,但看起来它访问了一个实例字段,即使它没有。事实上,使用这种语法甚至不检查是否this实际上引用了一个对象:Person notReallyAPerson = null; notReallyAPerson.qtdone++; // this works!

白猪掌柜的

this.qtdone等价于qtdone或Person.qtdone。但是this不推荐使用静态访问。唯一的区别是, qtdone 可能会被局部变量遮蔽。在这种情况下,使用类名进行限定是有意义的:setQtDone(int qtdone) {  Person.qtdone = qtdone;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java