Java中成員變數和屬性之間的關係
有人可能遇到這樣的錯誤,明明在類中定義了某個成員變數,但是系統在執行的時候提示錯誤:屬性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方法,然後看看方法名字是否寫的正確。
相關推薦
Java中成員變數和屬性之間的關係
有人可能遇到這樣的錯誤,明明在類中定義了某個成員變數,但是系統在執行的時候提示錯誤:屬性XX沒有定義。這是什麼原因呢? 大家知道成員變數有多種訪問控制符,通常都應該把成員變數定義成私有的,然後為該成員變數提供set方法和get方法,外界通過set方法和get方法對成員變數進行
java中成員變數和區域性變數
1.成員變數 在類中定義,用來描述物件將要有什麼。 2.區域性變數 在類的方法中定義,在方法中臨時儲存資料 成員變數和區域性變數區別 1.作用域不同 成員變數的作用域在整個類內部都是可見的 區域性變數的作用僅限於定義它的方法、 2.初始值不同 jav
Java中成員變數和成員方法的使用
package g.practise_myself; /*作者:陳天祥 時間:2016.10.7 功能:成員變數和成員方法的使用 */ import java.io.*; public class Object {public static void main
Java中成員變數和構造方法誰先初始化的問題
一、類的初始化 對於類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態成員變數。 類的編譯決定了類的初始化過程。 編譯器生成的class檔案主要對定義在原始檔中的類進行了如下的更改: 1) 先按照靜態成員變數的定義順序在類內部宣告成員
Java中JDK,JRE和JVM之間的關係-(轉載)
初學JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先從概念上理解一下吧,JDK(Java Development Kit)簡單理解就是Java開發工具包,JRE(Java Runtime Enviroment)是Java的執行環境,JVM( java virtual machine)也就是
Java反射之——Java獲取類中成員變數和建構函式的資訊
我們無論是獲取成員變數資訊,亦或者是獲取建構函式的資訊,都必須獲取類的類型別,然後通過類的類型別進行對成員變數和建構函式的操作。 注:成員變數和建構函式也都是物件,前者是Feild的物件,在java.lang.reflec.Feild中封裝了對成員變數的資訊。後者是Constructor的物件,
java中靜態變數和成員變數的區別
所屬不同:靜態變數屬於類,所以也稱為為類變數;成員變數屬於物件,所以也稱為例項變數(物件變數)在記憶體中位置不同:靜態變數儲存於方法區裡的靜態區;成員變數儲存於堆記憶體區在記憶體中出現的時間不同:靜態變
java中抽象類和介面之間的區別和關係
首先抽象類歸根結底還是屬於類,對於抽象方法,是隻能存在於抽象類中的,我們無法再一個非抽象的類中宣告一個抽象方法,其次抽象方法只需要宣告,並不需要事先。當我們要寫一個抽象類的時候只需要在類的前面宣告為abstract即可了。同時抽象類是無法被例項化的,而抽象類的存在就是為了被
Java中成員變數、區域性變數、全域性變數、靜態變數存在位置及初始化
根據定義變數位置的不同,可以將變數分為成員變數和區域性變數。 成員變數是 定義在一個類的變數:類中方法外 區域性變數是定義在一個方法內的變數:方法中 成員變數分為: 靜態屬性:隨類的存在而存在,是在類載入的初始化 非靜態屬性:隨例項的屬性存在而存在。 區域性變數: 區域性變數不能加s
JAVA基礎(7)---java中的變數和常量
資料在執行過程中,有的不會改變,有的會發生改變。變得就稱為變數 不變的就稱常量。 變數 變數:變數是Java程式中最基本的儲存單元 變數的屬性:變數名,資料型別,儲存單元和變數值 1、變數名:合法的識別符號 2、資料型別:可以是基本資料型別和引用資料型
java中例項變數和類變數的區別
最近在學習java虛擬機器,有點搞不清例項變數和類變數的區別,特此記錄一下 例項變數 個人理解有點像成員變數,在建構函式的時候進行初始化 1.例項變數宣告在一個類中,但在方法、構造方法和語句塊之外; 2.當一個物件被例項化之後,每個例項變數的值就跟著確定; 3.例項變數在物件
Java基礎------成員變數和區域性變數的區別和形參問題
在類中的位置不同 (1)成員變數:類中方法外。 (2)區域性變數:方法內部或者方法宣告上。 在記憶體中的位置不同 (1)成員變數:堆記憶體。 (2)區域性變數:棧記憶體。 生命週期不同 (1)成員變數:隨著物件的存在而存在,隨著物件的消失而消失。 (2)區域性變數:隨
Java中成員變數、構造方法、程式碼塊執行順序剖析
今天,測試了一下java中成員變數、構造方法、程式碼塊等的執行順序,程式碼如下: package com.carol.entity; /** * @author Carol Tang * @version 1.0.0 * @date 2018-09-13 10:37
Java中成員變數與區域性變數異同
成員變數: (1)宣告的地方:在類中宣告。 (2)成員變數不賦初值,系統會預設有初值。int:0, double:0.0, char:空格, String:null. (3)生命週期:在物件建立時產生,在物件使用完被
java中成員變數(例項變數),區域性變數,類變數的區別
主要從以下幾個方面來比較: 作用域: 成員變數:成員變數又叫例項變數,它是類的例項,所作用於所在的整個類。 區域性變數:只在某個範圍有效(例如方法中)。 類變數:有效性主要和變數前的修飾符有關,例如private修飾就只對此類有效,public對所有包都有效。 儲存位置: 成員變
java 初學 成員變數和區域性變數的區別
作用域不同 區域性變數的作用域僅限於定義它的方法。 成員變數的作用域在整個類內部都是可見的。 初始值不同 java會給成員變數一個初始值。 java不會給區域性變數一個初始值。 定義次數不同 在同一個方法中,不允許同名區域性變數。 在不同方法中,允許同名區域性變數。
Java中例項變數和區域性變數未初始化的情況
例項變數會有預設初始值(0,false,null,'\u0000'等),區域性變數不會有預設初始值, public class test01 { private String s; private int [] year = new int[3]; public
Java介面成員變數和方法預設修飾符
Java的interface中,成員變數的預設修飾符為:public static final 所以我們在interface中定義成員變數的時候,可以 1:public static final String name = "張三"; 2:String name = "張三"; 以上兩種都可以,老司機一般都
Java中byte[]陣列和int之間的轉換
在最近的專案中需要用到byte[]和int互轉,找了一些資料選了其中感覺蠻不錯的一種解決方法記錄一下。 int轉byte[] /** * 將int數值轉換為佔四個位元組的byte陣列,本方法適用於(低位在前,高位在後)的順序。 和
java中的Stack和Queue之間用法解釋,還有heap
Stack(堆疊)是一種後進先出的模式,只能在棧頭進行插入與刪除操作。 1. push 把項 壓入棧頂。其作用與 addElement (item ) 相同。 引數 item 壓入棧頂的項 。 返回: item 引數 ; 2. pop () 移除棧頂物