1. 程式人生 > >Java中成員變數和屬性之間的關係

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) 先按照靜態成員變數的定義順序在類內部宣告成員

JavaJDK,JREJVM之間關係-(轉載)

初學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 = "張三"; 以上兩種都可以,老司機一般都

Javabyte[]陣列int之間的轉換

在最近的專案中需要用到byte[]和int互轉,找了一些資料選了其中感覺蠻不錯的一種解決方法記錄一下。 int轉byte[] /** * 將int數值轉換為佔四個位元組的byte陣列,本方法適用於(低位在前,高位在後)的順序。 和

java的StackQueue之間用法解釋,還有heap

Stack(堆疊)是一種後進先出的模式,只能在棧頭進行插入與刪除操作。 1.  push    把項 壓入棧頂。其作用與 addElement (item ) 相同。    引數 item 壓入棧頂的項 。 返回: item 引數 ; 2.  pop ()   移除棧頂物