如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
文章目錄
- 變量相關概念
- 變量/常量
- 類變量/靜態變量
- 成員變量/實例變量
- 類屬性/實例屬性/對象屬性
- 什么是 field
 
- 成員變量和類變量的區別
- 兩個變量的生命周期不同
- 訪問方式不同
- 數據存儲位置不同
 
- 方法相關概念
- 示例代碼
- 判斷題
變量相關概念
變量/常量
所謂變量就是指可以改變的數據量,即數值可以改變。
 所謂常量就是指不可以改變的數據量,即數值不可以改變,可以稱為“常數”,也可以稱為“定數”,與之相反的是變量。
 
類變量/靜態變量
類變量是由 static 修飾的變量,也稱為靜態變量,可以通過類名訪問,也可以通過實例對象來訪問,通過對象訪問也只是編碼階段這樣寫而已,在編譯的時候會被自動轉換成“類名稱.變量名”的語法格式。
靜態變量也叫字段(field)。
成員變量/實例變量
非 static 修飾的變量都叫成員變量,也叫實例變量,也可以叫對象變量(很少這樣叫),只能通過“實例對象”訪問。
成員變量也叫字段(field)。
類屬性/實例屬性/對象屬性
類屬性就是實例屬性,也叫對象屬性,是根據 get 方法得來的。
類屬性的定義規則:get 方法名,去掉 get 后,將剩余部分首字母小寫得到的字符串就是這個類的屬性。
例如類 Person 含有方法 getName(),那么 name 就是該類的屬性了。
下面例子中,屬性名和成員變量名相同,都是 n:
public class Test {private String n; // n是成員變量public String getN() { // n是類的屬性return n;}public void setN(String n) {this.n = n;} }注:屬性名和成員變量名通常情況下相同,這符合 JavaBean 規范。
下面例子中,屬性是 name,成員變量 n 不是類的屬性:
public class Test {private String n; // n不是類的屬性public String getName() { // name是類的屬性return n;}public void setName(String n) {this.n = n;} }注:上述例子的寫法不推薦,不符合 JavaBean 的規范,但是我們要理解。
下面的例子中,我們稱 username 為只讀屬性,因為只能通過 get 方法訪問,沒有提供寫入的方法:
public class Test {private String userName; // userName是成員變量public String getUserName(){ // userName是類的屬性return "aaa"; } }什么是 field
類中方法外聲明的所有變量(靜態變量、成員變量、常量)就是 field,中文譯為“字段”或“域”,通常稱為“字段”。方法的參數、方法內的局部變量不可以稱為 field。
class A {private int a; // private field 私有域protected double b; // protected field 保護域public String c; // public field 公共域A d; // default access field 默認訪問域public static Object e; // public static field 公共靜態域 }成員變量和類變量的區別
兩個變量的生命周期不同
成員變量隨著實例的創建而存在,隨著實例對象的回收而消失
靜態變量隨著類的加載而存在,隨著類的消失而消失
訪問方式不同
成員變量只能通過對象來訪問
靜態變量可以通過對象來訪問,也可以通過類名來訪問,通過對象訪問只是在編碼階段,編譯期會轉換成“類名.變量名”的語法格式
數據存儲位置不同
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據
靜態變量存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據
方法相關概念
非靜態的方法都叫成員方法,必須通過對象才能調用。包含非靜態的私有方法、公共方法、保護方法、默認訪問權限的方法。私有方法比較特殊,只能通過本類的方法進行調用,但是也必須通過對象才能調用。
靜態的方法也叫類方法,只能通過類名進行調用,即便編碼時通過對象調用靜態方法,編譯時也會轉換成“類名稱.靜態方法名”的語法格式。
示例代碼
package priv.lwx.javaprac.variable; public class User {public static final String SKIN_COLOUR = "yellow"; // 這是常量,因為值不變;也叫類變量,也叫靜態變量,使用static修飾,僅有一份,所有實例共享,也叫字段(field),不可以稱為類屬性,因為沒有對應的get方法;不可以稱為成員變量,因為是通過類名訪問,不需要通過對象訪問,和對象無關public static String nationality = "china"; // 這叫類變量,也叫靜態變量,也叫字段(field),不是成員變量,也不是類屬性private String name; // 只能通過對象訪問,所以是成員變量,也叫實例變量,也叫字段(field),但是比較特殊,因為是私有的,所以只能由本來的方法才能訪問,本類的方法也是通過對象才能訪問public String getName() { // name是類的屬性,也可以稱為實例屬性、對象屬性,在Java中,類的屬性不是看變量,而是看get方法return name;}public void setName(String name) {this.name = name;} }判斷題
1.static 修飾的變量叫類變量,也就是類屬性
 答:錯。不是類屬性,屬性看 get 方法
2.非 static 修飾的叫成員變量,也叫實例變量,也叫實例屬性
 答:錯。不是實例屬性,屬性看 get 方法
3.類屬性就是實例屬性
 答:對
4.有人說 static 修飾的變量才叫 field,有人說方法內聲明的變量不能叫 field,參數也不能叫 field
 答:錯。類中方法外面聲明的所有變量叫 field
5.類屬性就是實例屬性
 答:對
6.實例屬性就是類屬性
 答:對
7.實例屬性就是類的成員變量
 答:錯,因為實例屬性是根據 get 方法得來的,和類聲明的變量無關
8.實例屬性就是類變量或者實例變量(也叫成員變量)
 答:錯,因為實例屬性是根據 get 方法得來的,和變量無關。有 static 修飾的變量叫類變量;沒有 static 修飾的變量叫實例變量。
9.Java 類屬性是如何定義的
 答:類屬性的定義規則是:將 get 方法名去掉 get 后,將剩余部分首字母小寫得到的字符串就是這個類的屬性,也叫實例屬性。
10.類的成員變量就是類屬性
 答:錯。類屬性和變量無關,而是根據 get 方法得到類的屬性。
11.類屬性一定是類的成員變量
 答:錯。類屬性和變量無關
12.類屬性一定是類變量
 答:錯。類屬性是根據 get 方法得到的,屬性和變量沒有半毛錢關系。類變量是靜態變量。
13.類變量就是類屬性
 答:錯。類變量是指 static 修飾的變量,也叫靜態變量。而類屬性則是根據 get 方法得來的,兩者不是同一個概念
總結
以上是生活随笔為你收集整理的如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 服务器备案查询(主机备案查询)
- 下一篇: 安卓市场旧版本下载(安卓市场旧)
