<style>code { color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 2px; font-weight: 600; padding: 2px 3px 2px 2px }</style>
前言
- 本文內容主要來自 Java 官方教程中的《嵌套類》章節,
- 本文提供的是 JDK 14 的示例代碼,
定義
靜態嵌套類(Static Nested Class),是 Java 中對類的一種定義方式,是嵌套類的一個分類,
Java 編程語言允許一個類被定義在另一個類中,這樣的類就稱為嵌套類,嵌套類分為兩種:靜態的和非靜態的,用 static 關鍵字來宣告的嵌套類,就稱為靜態嵌套類,
包含嵌套類的類,可稱為外圍類(Enclosing Class)或外部類(Outer Class),靜態嵌套類不能訪問其外圍類的其他成員,靜態嵌套類作為其外部類的成員,它可宣告為 private、public、protected 或包私有的,
- 提示:外部類只能宣告為
public或包私有的,
概述
與類的方法和變數一樣,靜態嵌套類與其外部類相關聯,與類的靜態方法一樣,靜態嵌套類不能直接參考其外圍類中定義的實體變數或方法,
1 /** 2 * 定義一個公共的 OuterClass 類, 3 */ 4 public class OuterClass { 5 private final String name; 6 7 public static void main(String[] args) { 8 String name = "Java"; 9 OuterClass outerObject = new OuterClass(name); 10 OuterClass.StaticNestedClass nestedObject = 11 new OuterClass.StaticNestedClass(name); 12 System.out.println(outerObject.getName()); 13 System.out.println(nestedObject.getName()); 14 } 15 16 /** 17 * 定義一個 OuterClass 類的構造方法, 18 * 19 * @param name 表示一個名稱字串, 20 */ 21 public OuterClass(String name) { 22 this.name = name; 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 /** 30 * 定義一個包私有的 StaticNestedClass 類, 31 */ 32 static class StaticNestedClass { 33 private final String name; 34 35 /** 36 * 定義一個 StaticNestedClass 類的構造方法, 37 * 38 * @param name 表示一個名稱字串, 39 */ 40 public StaticNestedClass(String name) { 41 this.name = name + " (in the nested object)"; 42 } 43 44 public String getName() { 45 return name; 46 } 47 } 48 } 49 /* 輸出結果: 50 Java 51 Java (in the nested object) 52 53 */
在上述示例中,若 StaticNestedClass 類的實體在創建時需要使用 OuterClass 類的成員變數,則可向其構造方法傳遞該變數的值,
- 提示:靜態嵌套類在與其外部類或其他類的實體成員進行互動的時候,就像任何其他頂層類(Top-Level Class)一樣,實際上,靜態嵌套類在行為上就是一個頂層類,為了便于打包,它被嵌套在了另一個頂層類中,
請用外圍類名來訪問靜態嵌套類,例如,在為靜態嵌套類創建物件時,請使用以下語法:
1 OuterClass.StaticNestedClass nestedObject = 2 new OuterClass.StaticNestedClass();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158274.html
標籤:Java
