什麼是封裝?
Java 中的封裝就是隱藏某些東西如何運作的細節,同時仍然允許其他人使用它。您可以將資料(如變數)和方法(如函數)分組到一個單元中,稱為類別。您不是讓每個人都直接存取您的數據,而是提供方法(getter 和 setter)來控制數據的存取或更改方式。這樣,您可以保護您的資料並保持程式碼整潔和有條理,不會讓任何人弄亂內部運作,除非您願意。
使用方法
要在 Java 中使用封裝,您需要建立一個具有私有欄位的類,並提供公共方法(如 getter 和 setter)來存取和修改這些欄位。這確保了數據只能以受控方式更改。例如,如果您想建立一個 Person 類,其中名稱和年齡是私有的,您可以使用 getter 來檢索值並使用 setter 來更新它們。操作方法如下:
public class Person { // Private fields private String name; private int age; // Constructor public Person(String name, int age) { this.name = name; this.age = age; } // Getter for name public String getName() { return name; } // Setter for name public void setName(String name) { this.name = name; } // Getter for age public int getAge() { return age; } // Setter for age public void setAge(int age) { if(age > 0) { // Simple validation this.age = age; } else { System.out.println("Age must be positive."); } } } // Using the Person class public class Main { public static void main(String[] args) { Person person = new Person("John", 25); // Accessing fields using getters System.out.println(person.getName()); // Output: John System.out.println(person.getAge()); // Output: 25 // Modifying fields using setters person.setName("Jane"); person.setAge(30); System.out.println(person.getName()); // Output: Jane System.out.println(person.getAge()); // Output: 30 } }
讓我們分解
讓我們分解程式碼並逐步解釋每個部分:
1. 帶有私有欄位的類別定義
public class Person { // Private fields private String name; private int age; }
解釋:
這是 Person 類,我們在其中定義了兩個私有欄位:name(字串)和age(int)。透過將這些欄位設為私有,我們確保沒有其他類別可以直接存取或修改它們。這就是封裝的核心思想──隱藏物件的內部狀態。
2.構造函數
// Constructor public Person(String name, int age) { this.name = name; this.age = age; }
解釋:
建構函式在建立 Person 物件時對其進行初始化。它需要兩個參數:姓名和年齡,並將這些值分配給私有欄位。這確保了當創建新的 Person 物件時,它以有效資料開始。
3. Getter 和 Setter
// Getter for name public String getName() { return name; } // Setter for name public void setName(String name) { this.name = name; }
解釋:
建構函式在建立 Person 物件時對其進行初始化。它需要兩個參數:姓名和年齡,並將這些值分配給私有欄位。這確保了當創建新的 Person 物件時,它以有效資料開始。
4.年齡的Getter和Setter(帶驗證)
// Getter for age public int getAge() { return age; } // Setter for age public void setAge(int age) { if (age > 0) { // Simple validation this.age = age; } else { System.out.println("Age must be positive."); } }
解釋:
getter getAge() 的工作方式與 name 的 getAge() 方法相同,允許存取年齡欄位。
setAge() 方法不僅允許修改年齡字段,還添加了驗證檢查。 if 條件確保僅當年齡為正數時才設定年齡。如果提供了無效的年齡(例如負數),則設定器將阻止更新並列印訊息。這是封裝如何讓您控制可以設定的資料類型的範例。
5. 使用 Person 類別
// Using the Person class public class Main { public static void main(String[] args) { Person person = new Person("John", 25); // Accessing fields using getters System.out.println(person.getName()); // Output: John System.out.println(person.getAge()); // Output: 25 // Modifying fields using setters person.setName("Jane"); person.setAge(30); System.out.println(person.getName()); // Output: Jane System.out.println(person.getAge()); // Output: 30 } }
解釋:
在本節中,我們使用建構函式建立一個 Person 物件(person)。建構函數將初始名稱設定為“John”,年齡設定為 25。
然後,我們使用 getter(getName() 和 getAge())來列印 name 和age 的值。之後,我們使用 setter(setName() 和 setAge())來更新值。最後,再次使用 getter 列印更新後的值。
封裝實務重點:
-
資料保護:
私有欄位不能從類別外部直接存取或修改。
-
受控存取:
getter 和 setter 提供了一種存取和修改私有欄位的受控方式。
-
驗證:
年齡的設定器示範如何強制執行規則(例如,年齡必須為正)以保護資料免受無效輸入的影響。
以上是什麼是封裝以及如何使用它。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文分析了2025年的前四個JavaScript框架(React,Angular,Vue,Susve),比較了它們的性能,可伸縮性和未來前景。 儘管由於強大的社區和生態系統,所有這些都保持占主導地位,但它們的相對人口

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

Node.js 20通過V8發動機改進可顯著提高性能,特別是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精製的調試工具,提高開發人員的生產率和應用速度。

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文介紹了SnakeyAml中的CVE-2022-1471漏洞,這是一個允許遠程代碼執行的關鍵缺陷。 它詳細介紹瞭如何升級春季啟動應用程序到Snakeyaml 1.33或更高版本的降低風險,強調了依賴性更新

本文使用lambda表達式,流API,方法參考和可選探索將功能編程集成到Java中。 它突出顯示了通過簡潔性和不變性改善代碼可讀性和可維護性等好處

本文探討了在黃瓜步驟之間共享數據的方法,比較方案上下文,全局變量,參數傳遞和數據結構。 它強調可維護性的最佳實踐,包括簡潔的上下文使用,描述性


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),