亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(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 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號