搜尋
首頁Javajava教程什麼是封裝以及如何使用它。

What is encapsulation and how to use it.

什麼是封裝?
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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java平台獨立性:OS之間的差異Java平台獨立性:OS之間的差異May 16, 2025 am 12:18 AM

Java在不同操作系統上的表現存在細微差異。 1)JVM實現不同,如HotSpot、OpenJDK,影響性能和垃圾回收。 2)文件系統結構和路徑分隔符不同,需使用Java標準庫處理。 3)網絡協議實現差異影響網絡性能。 4)GUI組件外觀和行為在不同系統上有別。通過使用標準庫和虛擬機測試,可減少這些差異的影響,確保Java程序穩定運行。

Java的最佳功能:從面向對象的編程到安全性Java的最佳功能:從面向對象的編程到安全性May 16, 2025 am 12:15 AM

javaoffersrobustobject-IentiendedProgrammming(OOP)和Top-Notchsecurityfeatures.1)OopinjavainCludesClasses,對象,繼承,多態性,和列出,andeclingfleximaintainablesys.ss.2)SecurityFeateTuersLudEtersludEterMachine(

JavaScript與Java的最佳功能JavaScript與Java的最佳功能May 16, 2025 am 12:13 AM

JavaScriptandJavahavedistinctstrengths:JavaScriptexcelsindynamictypingandasynchronousprogramming,whileJavaisrobustwithstrongOOPandtyping.1)JavaScript'sdynamicnatureallowsforrapiddevelopmentandprototyping,withasync/awaitfornon-blockingI/O.2)Java'sOOPf

Java平台獨立性:收益,限制和實施Java平台獨立性:收益,限制和實施May 16, 2025 am 12:12 AM

JAVAACHIEVESPLATFORMINDEPENTENCETHROUGHJAVAVIRTAILMACHINE(JVM)和BYTECODE.1)THEJVMINTERPRETSBBYTECODE,允許theingthesmecodetorunonanyanyanyanyplatformwithajvm.2)

Java:真實詞的平台獨立性Java:真實詞的平台獨立性May 16, 2025 am 12:07 AM

java'splatformendependecemeansapplicationscanrunonanyplatformwithajvm,使“ Writeonce,runanywhere”。

JVM性能與其他語言JVM性能與其他語言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台獨立性:使用示例Java平台獨立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架構:深入研究Java虛擬機JVM架構:深入研究Java虛擬機May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

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