Java | 字段(Field)


字段

Java 字段

 

前言


【目錄】

概述


 

字段(Field),是 Java 編程語言中類的一個成員,主要用來存儲對象的狀態(如同某些編程語言中的變量),所以有時也可稱為成員字段或成員變量

在類中有下列幾種變量(Variable):

局部變量參數始終被歸類為“變量”(而不是“字段”)。

【目錄】

聲明字段


 

/**
 * 字段示例
 *
 * @author Blume
 */
public class FieldDemo {
    public static void main(String[] args) {

        // 類中的常量字段可直接訪問而無需創建對象。
        System.out.println(MyField.CONSTANT_FIELD);
        System.out.println("---- ---- ---- ---- ----");

        // 類中的靜態字段可直接訪問而無需創建對象。
        MyField.sharedField = "sharedField:\n這是在 MyField 類中的字符串靜態字段。";
        System.out.println(MyField.sharedField);
        System.out.println("---- ---- ---- ---- ----");

        // 類中的實例變量只有在創建對象后才能訪問。
        final MyField demo = new MyField();
        demo.setName("name:\n這是在 MyField 類中的字符串實例變量。");
        System.out.println(demo.getName());
    }
}

/**
 * 定義 MyField 類
 *
 * @author Blume
 */
class MyField {

    // 聲明一個常量字段。
    public static final String CONSTANT_FIELD =
            "CONSTANT_FIELD:\n這是在 MyField 類中的字符串常量字段。";

    // 聲明一個靜態字段。
    public static String sharedField;

    // 聲明一個實例變量。
    private String name;

    // 獲取實例變量值。
    public String getName() {
        return name;
    }

    // 設置實例變量值。
    public void setName(String name) {

        // 可插入用於更改實例變量值的條件判斷語句,
        // 以防實例變量值被意外或非法更改。
        this.name = name;
    }
}
/* 輸出結果:
CONSTANT_FIELD:
這是在 MyField 類中的字符串常量字段。
---- ---- ---- ---- ----
sharedField:
這是在 MyField 類中的字符串靜態字段。
---- ---- ---- ---- ----
name:
這是在 MyField 類中的字符串實例變量。
 */

上例所示,字段聲明通常包括下列幾個部分,順序如下:

  1. 零個、一個或多個修飾符,如 public、protected、private、staticfinal 等。
  2. 類型
  3. 字段名

【目錄】

修飾符

可在字段聲明的開頭部分添加 public、protected 或 private 訪問修飾符或者不加,用來表示字段的訪問控制級別。

也可在訪問修飾符之后添加其他修飾符:

  • 若添加 final 修飾符,則表示該字段的值在初始化后保持不變,即它只接受首次分配給它的值,之后在其生命期內無法改變,類似於常量,可作為對字段值的一種限定和保護。
  • 若添加 static 修飾符,則表示該字段可直接訪問而無需創建對象。或者說,這是在告訴 Java 編譯器,無論該字段所在的類被實例化了多少次,該字段始終都存在,故可作為該類所有實例的共有字段。
  • 提示:不允許添加 abstract 修飾符,因為字段本質上是實體,不存在抽象字段。否則,Java 編譯器將會生成一條類似於“此處不允許使用修飾符 abstract”的錯誤消息。

【目錄】

分類

按使用修飾符的不同,字段可分為:

  • 常量字段:聲明為 static final 的字段,可視為常量(Constant)。由於常量字段與對象是否創建無關,所以在定義類時就要給定其初始值。如前面示例中的 CONSTANT_FIELD 字段。
  • 靜態字段(Static Field):聲明為 static 的字段。常量字段類變量都屬於靜態字段。
  • 非靜態字段(Non-Static Field):沒有聲明為 static 的字段。又可稱為實例變量
  • 成員變量(Member Variable):除常量字段外的其他所有字段。
    • 實例變量(Instance Variable):沒有聲明為 static 的成員變量,它就是非靜態字段。從技術上講,對象將各自的狀態存儲在“實例變量(非靜態字段)”中,它們的值對類的每個實例(每個對象)來說都是獨有的。因此,本着封裝的精神,將實例變量(非靜態字段)聲明為 private 是值得提倡的。如前面示例中的 name 字段。
    • 類變量(Class Variable):聲明為 static 的成員變量,它屬於靜態字段。如前面示例中的 sharedField 字段。
    • 提示:聲明為 final 的成員變量,類似於常量,可作為對成員變量值的一種限定和保護。

【目錄】

類型

所有字段,包括局部變量參數,都必須具有類型。

可使用原初類型(Primitive Type):

  • boolean:表示一個布爾值,它的取值只有兩個:truefalse
  • char:表示一個單一的 16 位 BMP 字符,它的取值范圍在 '\u0000'(0)至 '\uffff'(65535)之間。
  • byte:表示一個 8 位有符號字節,它的取值范圍在 -128127 之間。
  • short:表示一個 16 位有符號字(雙字節),它的取值范圍在 -3276832767 之間。
  • int:表示一個 32 位有符號整數(四字節),它的取值范圍在 -21474836482147483647 之間。
  • long:表示一個 64 位有符號長整數(八字節),它的取值范圍在 -92233720368547758089223372036854775807 之間。
  • float:表示一個 32 位單精度浮點數。
  • double:表示一個 64 位雙精度浮點數。
  • 提示:“Primitive Type”,在不同的文章和資料中被翻譯為“原始類型”、“內置類型”、“簡單類型”、“基元類型”、“基礎類型”、“基本類型”等等。本文筆者所寫的其他相關文章中統一稱之為“原初類型”。

也可使用引用類型(Reference Type):

  • Boolean:表示一個 boolean 值。
  • Character:表示一個 char 值。
  • Byte:表示一個 byte 值。
  • Short:表示一個 short 值。
  • Integer:表示一個 int 值。
  • Long:表示一個 long 值。
  • Float:表示一個 float 值。
  • Double:表示一個 double 值。
  • String:表示一個字符串。
  • ClassDesc,表示一個對類、接口、數組或原初類型進行描述的標稱描述符。
  • 提示:所有的類名和接口名都可作為引用類型,比如前面示例中的 MyField。

還可使用類、接口或原初類型的數組類型(Array Type)。比如,int[] 表示一個 int 原初類型的一維數組類型(請參閱 arrayType(int) 示例)等。

【目錄】

字段名

所有變量,無論是成員變量局部變量還是參數,都應遵循以下的命名規則和約定:

  • 變量名可以是任何合法的標識符:
    • 字母(a - zA - Z):長度不限。
    • 數字(0 - 9):長度不限。
    • 美元符($):按慣例,根本不使用美元符。一些自動生成的名稱中可能會包含美元符(請參閱 nested(String) 示例),但變量名應始終避免使用它。
    • 下划線(_):按慣例,變量名不使用下划線。下划線只用於常量字段名
    • 不允許使用空格符。
  • 按慣例,變量名以字母開頭,后續字符可以是字母或數字。
    • 從技術上講,以美元符或下划線開頭是合法的,但不鼓勵這種做法。
    • 后續字符應避免使用美元符和下划線,盡管這樣做也是合法的。
    • 不允許以數字開頭。
  • 變量選擇名稱時,請使用完整單詞,這樣做可使代碼更易於閱讀和理解。
    • 應避免使用晦澀難懂的縮寫。
    • 不允許將關鍵字或保留字用作變量名。如 packageimportclassinterfacedefault 等等。
  • 變量名對大小寫敏感,如 demoDEMO 將視為兩個名稱。
    • 如果只有一個單詞,請將單詞中的字母全部小寫。如前面示例中的 name 字段。
    • 如果由多個單詞組成,請將第一個單詞中的字母全部小寫,並將緊跟其后的每個單詞的首字母大寫。如前面示例中的 sharedField 字段。

除下列兩項外,變量的命名規則和約定適用常量字段

  • 名稱中的字母應全部大寫。
  • 若由多個單詞組成,則單詞之間用下划線分隔。如前面示例中的 CONSTANT_FIELD 字段。

【目錄】

訪問字段


字段通過其名稱進行訪問。在訪問時,必須使用明確無誤的名稱。

在方法中,可使用一個簡單名稱來表示其所在類中的字段:

    public String getName() {
        return name;
    }

在這種情況下,name 是簡單名稱。

【目錄】

引用靜態字段

由於靜態字段對象的創建無關,所以在訪問它時,使用類名或相關表達式,然后是點(.)操作符,然后是靜態字段的簡單名稱:

        System.out.println(MyField.CONSTANT_FIELD);
        System.out.println(MyField.sharedField);

【目錄】

引用非靜態字段

非靜態字段沒有聲明為 private,則在它所在的類外訪問它時,必須使用對象引用或相關表達式,然后是點(.)操作符,然后是非靜態字段的簡單名稱。

【目錄】

更改實例變量值

建議將實例變量聲明為 private,否則可能會產生面條式代碼(Spaghetti Code)。如果可在類外更改該類中的實例變量值,那么該實例變量將會變得不確定,因為任何一段在類外的代碼都有可能改變其值。

可使用方法來更改實例變量值:

    public void setName(String name) {

        // 可插入用於更改實例變量值的條件判斷語句,
        // 以防實例變量值被意外或非法更改。
        this.name = name;
    }

【目錄】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM