當您希望在其所有對象之間共享類的某些屬性時,我(認為)使用靜態變量。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個贊
可以使用訪問靜態變量的事實是this
Java 語言的一個奇怪的怪癖。真的沒有理由故意這樣做。
要么使用不合格的名稱qtdone
,要么使用類名來限定它:Person.qtdone
.
使用this.qtdone
有效,但看起來它訪問了一個實例字段,即使它沒有。事實上,使用這種語法甚至不檢查是否this
實際上引用了一個對象:
Person notReallyAPerson = null; notReallyAPerson.qtdone++; // this works!

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
this.qtdone等價于qtdone或Person.qtdone。但是this不推薦使用靜態訪問。
唯一的區別是, qtdone 可能會被局部變量遮蔽。在這種情況下,使用類名進行限定是有意義的:
setQtDone(int qtdone) {
Person.qtdone = qtdone;
}
添加回答
舉報
0/150
提交
取消