一文讓你徹底弄懂Java封裝(超詳細(xì))
一、Java 封裝是什么
在 Java 中,封裝是一種基本的面向?qū)ο缶幊谈拍?。?jiǎn)單來(lái)說(shuō),它就像是把數(shù)據(jù)和對(duì)數(shù)據(jù)的操作包裝在一起,形成一個(gè)獨(dú)立的單元。例如,一個(gè)汽車類,汽車的各種屬性(如顏色、型號(hào)、速度等)以及對(duì)這些屬性進(jìn)行操作的方法(如加速、減速、停車等),都被封裝在汽車這個(gè)類中。這樣,外界就不能隨意訪問(wèn)和修改類內(nèi)部的數(shù)據(jù),而只能通過(guò)類提供的方法來(lái)進(jìn)行操作。
二、Java 封裝的作用
- 數(shù)據(jù)隱藏:通過(guò)封裝,將類的內(nèi)部數(shù)據(jù)隱藏起來(lái),避免外部直接訪問(wèn)和修改。這就像你的私人日記,你不會(huì)隨意讓別人翻閱和修改,只有你自己可以控制對(duì)它的操作。比如一個(gè)用戶類,用戶的密碼字段是非常敏感的,通過(guò)封裝,將密碼字段設(shè)置為私有,外部就無(wú)法直接獲取和修改密碼,保證了數(shù)據(jù)的安全性。
- 提高代碼的可維護(hù)性:當(dāng)類的內(nèi)部實(shí)現(xiàn)發(fā)生變化時(shí),只要對(duì)外提供的接口不變,就不會(huì)影響到其他使用這個(gè)類的代碼。比如一個(gè)計(jì)算面積的類,最初使用一種算法計(jì)算面積,后來(lái)因?yàn)樾阅軆?yōu)化更換了算法,但是只要提供給外部調(diào)用的計(jì)算面積的方法名和參數(shù)不變,其他依賴這個(gè)類的代碼就不需要修改,降低了代碼維護(hù)的難度。
- 增強(qiáng)代碼的復(fù)用性:封裝好的類可以被多個(gè)地方重復(fù)使用。例如,一個(gè)工具類封裝了各種常用的字符串操作方法,在不同的項(xiàng)目模塊中都可以引入這個(gè)工具類來(lái)使用這些方法,提高了開發(fā)效率。
三、Java 封裝的實(shí)現(xiàn)方式
- 訪問(wèn)修飾符:在 Java 中,主要通過(guò)訪問(wèn)修飾符來(lái)實(shí)現(xiàn)封裝。常見的訪問(wèn)修飾符有 private、default(默認(rèn),不寫修飾符就是 default)、protected 和 public。
- private:被 private 修飾的成員(屬性或方法)只能在本類中訪問(wèn)。例如:
public class Person { private String name; private int age; // 私有方法,只能在本類中調(diào)用 private void privateMethod() { System.out.println("這是一個(gè)私有方法"); } } - default:默認(rèn)訪問(wèn)修飾符,被它修飾的成員可以在同一個(gè)包內(nèi)訪問(wèn)。如果一個(gè)類沒有指定包名,那么它屬于默認(rèn)包,同一個(gè)源文件中的類都在默認(rèn)包內(nèi)。例如:
package com.example; public class Animal { // 默認(rèn)訪問(wèn)修飾符,同一個(gè)包內(nèi)可以訪問(wèn) int legs; // 默認(rèn)訪問(wèn)修飾符的方法,同一個(gè)包內(nèi)可以調(diào)用 void run() { System.out.println("動(dòng)物在跑"); } } - protected:被 protected 修飾的成員可以在同一個(gè)包內(nèi)以及不同包的子類中訪問(wèn)。例如:
package com.example; public class Parent { protected String protectedField; protected void protectedMethod() { System.out.println("這是一個(gè)受保護(hù)的方法"); } } package com.other; import com.example.Parent; public class Child extends Parent { public void useProtected() { protectedField = "測(cè)試"; protectedMethod(); } } - public:被 public 修飾的成員可以在任何地方訪問(wèn)。例如:
public class PublicClass { public String publicField; public void publicMethod() { System.out.println("這是一個(gè)公共方法"); } }
- Getter 和 Setter 方法:對(duì)于私有屬性,通常會(huì)提供 public 的 Getter 和 Setter 方法來(lái)訪問(wèn)和修改這些屬性。Getter 方法用于獲取屬性的值,Setter 方法用于設(shè)置屬性的值。例如:
public class Student { private String name; private int age; // Getter方法 public String getName() { return name; } // Setter方法 public void setName(String name) { this.name = name; } // Getter方法 public int getAge() { return age; } // Setter方法 public void setAge(int age) { if (age > 0 && age < 120) { this.age = age; } else { System.out.println("年齡不合法"); } } }
在上述代碼中,通過(guò) Getter 和 Setter 方法,可以對(duì)私有屬性進(jìn)行安全的訪問(wèn)和修改,在 Setter 方法中還可以添加一些邏輯判斷,保證設(shè)置的數(shù)據(jù)是合法的。
四、總結(jié)
Java 封裝是面向?qū)ο缶幊痰闹匾匦灾?,它通過(guò)數(shù)據(jù)隱藏、提高可維護(hù)性和增強(qiáng)復(fù)用性等方面,為 Java 程序的開發(fā)帶來(lái)了諸多好處。通過(guò)合理使用訪問(wèn)修飾符和 Getter、Setter 方法,能夠有效地實(shí)現(xiàn) Java 封裝,編寫出更加健壯、可維護(hù)和可復(fù)用的代碼。希望通過(guò)本文的介紹,你對(duì) Java 封裝有了更深入的理解。
到此這篇關(guān)于Java封裝的文章就介紹到這了,更多相關(guān)Java封裝詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java深入了解數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹增 插 刪 創(chuàng)詳解
二叉搜索樹是以一棵二叉樹來(lái)組織的。每個(gè)節(jié)點(diǎn)是一個(gè)對(duì)象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點(diǎn)的左孩子,right指向該節(jié)點(diǎn)的右孩子,p指向該節(jié)點(diǎn)的父節(jié)點(diǎn),key是它的值2022-01-01
Spring?Boot統(tǒng)一處理全局異常的實(shí)戰(zhàn)教程
最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot統(tǒng)一處理全局異常的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
SpringSecurity6.4中一次性令牌登錄(One-Time Token Login)實(shí)現(xiàn)
Spring Security為一次性令牌認(rèn)證提供了支持,本文就來(lái)介紹一下SpringSecurity6.4中一次性令牌登錄(One-Time Token Login)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Java避免UTF-8的csv文件打開中文出現(xiàn)亂碼的方法
這篇文章主要介紹了Java避免UTF-8的csv文件打開中文出現(xiàn)亂碼的方法,結(jié)合實(shí)例形式分析了java操作csv文件時(shí)使用utf-16le編碼與utf8編碼相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
java 基礎(chǔ)之final、finally和finalize的區(qū)別
這篇文章主要介紹了java 基礎(chǔ)之final、finally和finalize的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-05-05
Java中小球碰撞并使用按鈕控制數(shù)量實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Java中小球碰撞并使用按鈕控制數(shù)量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-12-12
SpringCloud項(xiàng)目中Feign組件添加請(qǐng)求頭所遇到的坑及解決
這篇文章主要介紹了SpringCloud項(xiàng)目中Feign組件添加請(qǐng)求頭所遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

