Java中成員變數和屬性之間的關係

來源:互聯網
上載者:User

有人可能遇到這樣的錯誤,明明在類中定義了某個成員變數,但是系統在啟動並執行時候提示錯誤:屬性XX沒有定義。這是什麼原因呢?

大家知道成員變數有多種存取控制符,通常都應該把成員變數定義成私人的,然後為該成員變數提供set方法和get方法,外界通過set方法和get方法對成員變數進行操作。這樣對外界來說,只有能夠訪問到的成員變數才算是屬性,例如下面的代碼:

private String userName;

public void setUserName(String userName){

   this.userName = userName;

}

public String getUserName(){

   return userName;

}

這時候我們說當前類有userName屬性,注意要區分大小寫。

另外還有一點非常重要,屬性的名字不是由成員變數決定的。通常set方法和get方法的名字是set或者get加上成員變數的名字,成員變數的首字母要變成大寫。而屬性的名字是什麼了,其實屬性的名字就是去掉set或者get,然後把首字母變成小寫。從這兩個命名規則可以看出,通常屬性名稱與成員變數的名字是一致的。但是,如果在寫set方法和get方法的時候,沒有按照預設的規則寫,則屬性名稱字和成員變數名字就一樣了。看下面的例子:

private String userName;

public void setUsername(String userName){

   this.userName = userName;

}

public String getUsername(){

   return userName;

}

在上面的代碼中,只修改了方法的名字(大寫的N變成小寫n),這時候屬性的名字已經由userName變成username了。如果要按照屬性名稱字訪問而不是直接存取get方法(例如,運算式語言),或者由架構自動完成屬性的賦值(例如,對於WebWork,需要在Action中需要定義與表單元素相同名字的屬性,對於Struts1,需要在ActionForm中定義與表單元素相同名字的屬性),這時候就必須寫username而不是userName,否則就抱錯,就是本文開頭所說的錯誤。

如果出現這樣的錯誤,首先查看有沒有定義set方法或者get方法,然後看看方法名字是否寫的正確。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.