最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java零基礎(chǔ)快速入門|封裝

2021-02-05 10:55 作者:動(dòng)力節(jié)點(diǎn)小王本王  | 我要投稿



本篇文章主要內(nèi)容

封裝的理解

不封裝存在的問題

怎么封裝

難點(diǎn)解惑


學(xué)習(xí)目標(biāo)

理解為什么要進(jìn)行封裝?封裝有什么好處?封裝的代碼怎么實(shí)現(xiàn)?

?

知識(shí)框架

封裝(掌握)

封裝的理解

封裝是面向?qū)ο蟮娜筇卣髦?,什么是封裝?封裝有什么好處?怎么封裝,代碼怎么寫?這是大家這一章節(jié)要學(xué)習(xí)的內(nèi)容。

封裝從字面上來理解就是包裝的意思,專業(yè)點(diǎn)就是信息隱藏,是指利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,使其構(gòu)成一個(gè)不可分割的獨(dú)立實(shí)體,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類型的內(nèi)部,盡可能地隱藏內(nèi)部的細(xì)節(jié),只保留一些對(duì)外接口使之與外部發(fā)生聯(lián)系。系統(tǒng)的其他對(duì)象只能通過包裹在數(shù)據(jù)外面的已經(jīng)授權(quán)的操作來與這個(gè)封裝的對(duì)象進(jìn)行交流和交互。也就是說用戶是無需知道對(duì)象內(nèi)部的細(xì)節(jié),但可以通過該對(duì)象對(duì)外提供的接口來訪問該對(duì)象。

在現(xiàn)實(shí)世界當(dāng)中我們可以看到很多事物都是封裝好的,比如“鼠標(biāo)”,外部有一個(gè)殼,將內(nèi)部的原件封裝起來,至于鼠標(biāo)內(nèi)部的細(xì)節(jié)是什么,我們不需要關(guān)心,只需要知道鼠標(biāo)對(duì)外提供了左鍵、右鍵、滾動(dòng)滑輪這三個(gè)簡(jiǎn)單的操作。對(duì)于用戶來說只要知道左鍵、右鍵、滾動(dòng)滑輪都能完成什么功能就行了。為什么鼠標(biāo)內(nèi)部的原件要在外部包裝一個(gè)“殼”呢,起碼內(nèi)部的原件是安全的,不是嗎。再如“數(shù)碼相機(jī)”,外部也有一個(gè)殼,將內(nèi)部復(fù)雜的結(jié)構(gòu)包裝起來,對(duì)外提供簡(jiǎn)單的按鍵,這樣每個(gè)人都可以很快的學(xué)會(huì)照相了,因?yàn)樗陌存I很簡(jiǎn)單,另外照相機(jī)內(nèi)部精密的原件也受到了殼兒的保護(hù),不容易壞掉。

根據(jù)以上的描述,可以得出封裝有什么好處呢?封裝之后就形成了獨(dú)立實(shí)體,獨(dú)立實(shí)體可以在不同的環(huán)境中重復(fù)使用,顯然封裝可以降低程序的耦合度,提高程序的擴(kuò)展性,以及重用性或復(fù)用性,例如“鼠標(biāo)”可以在 A 電腦上使用,也可以在 B?電腦上使用。另外封裝可以隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),站在對(duì)象外部是看不到內(nèi)部復(fù)雜結(jié)構(gòu)的,對(duì)外只提供了簡(jiǎn)單的安全的操作入口,所以封裝之后,實(shí)體更安全了。



不封裝存在的問題

我們來看一段代碼,在不進(jìn)行封裝的前提下,存在什么問題:

運(yùn)行結(jié)果如下圖所示:

未進(jìn)行封裝的程序測(cè)試

以上程序MobilePhone 類未進(jìn)行封裝,其中的電壓屬性 voltage?對(duì)外暴露,在外部程序當(dāng)中可以對(duì) MobilePhone 對(duì)象的電壓 voltage??屬性進(jìn)行隨意訪問,導(dǎo)致了它的不安全,例如手機(jī)的正常電壓是 3~5V,但是以上程序已經(jīng)將手機(jī)電壓設(shè)置為100V,這個(gè)時(shí)候顯然是要出問題的, 但這個(gè)程序編譯以及運(yùn)行仍然是正常的,沒有出現(xiàn)任何問題,這是不對(duì)的。


?

怎么封裝

為了保證內(nèi)部數(shù)據(jù)的安全,這個(gè)時(shí)候就需要進(jìn)行封裝了,封裝的第一步就是將應(yīng)該隱藏的數(shù)據(jù)隱藏起來,起碼在外部是無法隨意訪問這些數(shù)據(jù)的,怎么隱藏呢?

我們可以使用 java 言中的 private 修飾符,private 修飾的數(shù)據(jù)表示私有的,私有的數(shù)據(jù)只能在本類當(dāng)中訪問。請(qǐng)看程序:

以上程序編譯報(bào)錯(cuò)了,請(qǐng)看下圖:

private 修飾的數(shù)據(jù)無法在外部程序中直接訪問

通過以上的測(cè)試,手機(jī)對(duì)象的電壓屬性確實(shí)受到了保護(hù),在外部程序中無法訪問了。但從當(dāng)前情況來看,voltage??屬性有點(diǎn)兒太安全了,一個(gè)對(duì)象的屬性無法被外部程序訪問,自然這個(gè)數(shù)據(jù)就沒有存在的價(jià)值了。所以這個(gè)時(shí)候就需要進(jìn)入封裝的第二步了:對(duì)外提供公開的訪問入口,讓外部程序統(tǒng)一通過這個(gè)入口去訪問數(shù)據(jù),我們可以在這個(gè)入口處設(shè)立關(guān)卡,進(jìn)行安全控制,這樣對(duì)象內(nèi)部的數(shù)據(jù)就安全了。

對(duì)于“一個(gè)”屬性來說,我們對(duì)外應(yīng)該提供幾個(gè)訪問入口呢?通常情況下我們?cè)L問對(duì)象的 某個(gè)屬性,不外乎讀取get和修改set),所以對(duì)外提供的訪問入口應(yīng)該有兩個(gè),這兩個(gè) 方法通常被稱為set 方法和 get 方法請(qǐng)注意:set get 方法訪問的都是某個(gè)具體對(duì)象的屬性, 不同的對(duì)象調(diào)用get?方法獲取的屬性值不同,所以set get?方法必須有對(duì)象的存在才能調(diào)用, 這樣的方法定義的時(shí)候不能使用static??關(guān)鍵字修飾,被稱為實(shí)例方法。實(shí)例方法必須使用“引用”的方式調(diào)用。還記得之前我們接觸的方法都是被 static 修飾的,這些方法直接采用“類名” 的方式調(diào)用,而不需要?jiǎng)?chuàng)建對(duì)象,在這里顯然是不行的。請(qǐng)看以下代碼:

運(yùn)行結(jié)果如下圖所示:

對(duì)封裝之后的測(cè)試

通過以上程序,可以看出MobilePhone voltage 屬性不能在外部程序中隨意訪問了,只能調(diào)用 MobilePhone setVoltage() 方法來修改電壓,調(diào)用 getVoltage()方法來讀取電壓,在setVoltage()方法中編寫了安全控制代碼,當(dāng)電壓低于 3V,或者高于 5V 的時(shí)候,程序拋出了異常,不允許修改電壓值,程序結(jié)束了。只有合法的時(shí)候,才允許程序修改電壓值。異常機(jī)制在后續(xù)的內(nèi)容中會(huì)學(xué)到,不要著急。

總之,在java?語言中封裝的步驟應(yīng)該是這樣的:需要被保護(hù)的屬性使用private?進(jìn)行修飾, 給這個(gè)私有的屬性對(duì)外提供公開的set?get?方法,其中set?方法用來修改屬性的值,get?方法用來讀取屬性的值。并且 set?get?方法在命名上也是有規(guī)范的,規(guī)范中要求 set?方法名是set?+ 屬性名屬性名首字母大寫),get?方法名是get?+ ?屬性名屬性名首字母大寫。其中set?法有一個(gè)參數(shù),用來給屬性賦值,set?方法沒有返回值,一般在set?方法內(nèi)部編寫安全控制程序, 因?yàn)楫吘?/span>set?方法是修改內(nèi)部數(shù)據(jù)的,而 get?方法不需要參數(shù),返回值類型是該屬性所屬類型

先記住,以后講:另外set 方法和 get 方法都不帶static 關(guān)鍵字,不帶static 關(guān)鍵字的方法稱為實(shí)例方法,這些方法調(diào)用的時(shí)候需要先創(chuàng)建對(duì)象,然后通過“引用”去調(diào)用這些方法,實(shí)例方法不能直接采用“類名”的方式調(diào)用。),例如以下代碼:

運(yùn)行結(jié)果如下圖所示:

set 和get 方法測(cè)試

有的讀者可能會(huì)有這樣的疑問:構(gòu)造方法中已經(jīng)給屬性賦值了,為什么還要提供 set?方法呢?注意了同學(xué)們,這是兩個(gè)完全不同的時(shí)刻,構(gòu)造方法中給屬性賦值是在創(chuàng)建對(duì)象的時(shí)候完成的,當(dāng)對(duì)象創(chuàng)建完畢之后,屬性可能還是會(huì)被修改的,后期要想修改屬性的值,這個(gè)時(shí)候就必須調(diào)用set?方法了。

?

難點(diǎn)解惑

對(duì)于本章節(jié)內(nèi)容來說,比較難以理解的是在之前所寫的程序中所有的方法都是帶有 static 關(guān)鍵字的,為什么在進(jìn)行封裝時(shí),提供的setter getter 方法就不能添加static 關(guān)鍵字了呢?

塊內(nèi)容在后期學(xué)習(xí) static 關(guān)鍵字之后自然就好理解了,這里我簡(jiǎn)單解釋一下:帶有 static??關(guān)鍵字的方法是靜態(tài)方法,不需要?jiǎng)?chuàng)建對(duì)象,直接通過“類”來調(diào)用。對(duì)于沒有static??關(guān)鍵字的方法被稱為實(shí)例方法,這些方法執(zhí)行時(shí)要求必須先創(chuàng)建對(duì)象,然后通過“引用”的方式來調(diào)用。而對(duì)于封裝來說,setter getter 方法都是訪問對(duì)象內(nèi)部的屬性,所以setter getter 方法在定義時(shí)不能添加static 關(guān)鍵字。


小結(jié)

通過本章節(jié)內(nèi)容的學(xué)習(xí),需要理解為什么要封裝,封裝有什么好處,以及掌握封裝的代碼應(yīng)該如何編寫。


最后附Java零基礎(chǔ)視頻教程給大家,配合學(xué)習(xí)效果更佳!!


Java零基礎(chǔ)快速入門|封裝的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
闽清县| 饶平县| 云南省| 长沙市| 剑阁县| 洮南市| 崇左市| 苍梧县| 吉首市| 视频| 皮山县| 保亭| 革吉县| 扶风县| 随州市| 大田县| 吴桥县| 宝鸡市| 永年县| 防城港市| 微博| 韶关市| 云龙县| 文成县| 岫岩| 宾阳县| 临潭县| 大余县| 丽水市| 苏尼特右旗| 潮州市| 大田县| 定西市| 溧水县| 禄丰县| 临沧市| 黑山县| 乃东县| 景宁| 通州市| 清新县|