编程体系结构(06):Java面向对象
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
一、基礎(chǔ)概念
1、面向?qū)ο蟾拍?/strong>
面向?qū)ο缶幊痰闹饕枷胧前褬?gòu)成問題的各個(gè)事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘一個(gè)事物在整個(gè)解決問題的步驟中的行為。
2、類和對(duì)象
對(duì)象:真實(shí)存在唯一的事物;在應(yīng)用程序中對(duì)象是數(shù)據(jù)和動(dòng)作的結(jié)合體,不僅能夠進(jìn)行操作,同時(shí)還能夠記錄下操作結(jié)果。
類:抽象的概念,實(shí)際就是對(duì)某種類型事物的共性屬性與行為的抽取;例如User[名稱.年齡.性別]類用來描述用戶的基礎(chǔ)信息。
Java開發(fā)中如何理解面向?qū)ο?#xff1a;構(gòu)建合適的對(duì)象接口API體系,創(chuàng)建合適的對(duì)象,解決合適的問題,例如JDK的API已經(jīng)定義好的類,通過這些類創(chuàng)建對(duì)象直接使用;通過自定義類來創(chuàng)建對(duì)象使用,在MVC中模式中,不同業(yè)務(wù)功能創(chuàng)建不同的接口和類系統(tǒng)。
3、屬性和方法
類中變量
位置區(qū)別:
- 成員變量是定義在方法之外,類內(nèi);
- 局部變量是定義在方法之內(nèi)。
作用區(qū)別:
- 成員變量的作用是用于描述一類事物的公共屬性的。
- 局部變量的作用就是提供一個(gè)變量給方法內(nèi)部使用而已。
初始值區(qū)別:
- 成員變量是有默認(rèn)的初始值。
- 局部變量是沒有默認(rèn)的初始值的,必須要先初始化才能使用。
生命周期:
- 隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失。
- 局部變量在調(diào)用了對(duì)應(yīng)的方法時(shí)執(zhí)行到了創(chuàng)建該變量的語句時(shí)存在,局部變量一旦出了自己的作用域那么馬上從內(nèi)存中消失。
類中方法
對(duì)一個(gè)類功能的具體描述,可能是類方法或者對(duì)象方法;
- 類方法,又叫靜態(tài)方法,使用類直接調(diào)用,常用工具類;
- 對(duì)象方法,又叫實(shí)例方法,使用類對(duì)象調(diào)用,常見API方法;
構(gòu)造方法
構(gòu)造函數(shù)的作用是用來給對(duì)應(yīng)的對(duì)象進(jìn)行初始化處理,沒有返回值類型的,構(gòu)造函數(shù)的函數(shù)名必須要與類名一致,如果一個(gè)類沒有顯式的聲明一個(gè)構(gòu)造方法,那么java編譯器會(huì)為該類添加一個(gè)無參的構(gòu)造函數(shù)的,如果一個(gè)類已經(jīng)顯式的寫上一個(gè)構(gòu)造方法時(shí),那么java編譯器則不會(huì)再為該類添加一個(gè)無參的構(gòu)造方法,構(gòu)造函數(shù)是可以在一個(gè)類中以重載的形式存在多個(gè)。
4、接口
接口是一個(gè)特殊的類,接口的成員變量默認(rèn)的修飾符為:public-static-final,接口中的方法都是抽象的方法,默認(rèn)的修飾符:public-abstract,接口不能創(chuàng)建對(duì)象且沒有構(gòu)造方法的,接口是給類去實(shí)現(xiàn)時(shí)使用的,非抽象類實(shí)現(xiàn)接口,必須要把接口中所有方法全部實(shí)現(xiàn)。
接口的作用:程序的解耦,定義實(shí)現(xiàn)類的約束規(guī)范,如果需要拓展特別功能,也可以基于接口形式實(shí)現(xiàn)。
類與接口之間關(guān)系:多實(shí)現(xiàn)關(guān)系;接口與接口之間關(guān)系:多繼承關(guān)系。
5、重載與重寫
方法重寫
父類的功能無法滿足子類的需求時(shí),可以進(jìn)行方法的重寫即子父類使用同名的函數(shù),且子類重寫的方法使用@Override注解,這里存在繼承的關(guān)系。
- 方法名與形參列表必須一致;
- 子類的權(quán)限修飾符必須要大于或者等于父類的權(quán)限修飾符;
- 子類的返回值類型必須要小于或者等于父類的返回值類型;
- 子類拋出的異常類型要小于或者等于父類拋出的異常類型;
方法重載
在一個(gè)類中存在兩個(gè)或者兩個(gè)以上的同名函數(shù),稱作為方法重載,函數(shù)名要一致,形參列表不一致(形參的個(gè)數(shù)或形參的類型不一致)。
6、包與權(quán)限
權(quán)限修飾符
權(quán)限修飾符就是控制被修飾的成員的范圍可見性,分為:public、private、protected、default(沒有修飾)。在不同包下面只有public 與 protected 可以訪問,而且protected必須是在繼承關(guān)系下才能夠訪問。
包package
包可以理解為計(jì)算機(jī)系統(tǒng)中的文件夾,用來解決類名重復(fù)產(chǎn)生沖突的問題,包名全部小寫,語句必須位于java文件中中第一個(gè)語句。
二、基本特征
封裝
把類中內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行隱藏,只暴露對(duì)外的接口,例如實(shí)際開發(fā)場景中一般實(shí)體類的所有成員屬性(成員變量)都要封裝起來,可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問,適當(dāng)?shù)姆庋b可以讓程序代碼更容易理解與維護(hù),加強(qiáng)安全性。
繼承
在現(xiàn)有父類的基礎(chǔ)上在重新構(gòu)建一個(gè)新類即子類,通過子類對(duì)象可以訪問父類非私有的成員變量和成員方法,以及重寫父類中的非私有成員方法,繼承的作用就是能提高代碼的復(fù)用性。
多態(tài)
多態(tài)指一個(gè)對(duì)象可以具備多種形態(tài),例如:父類的引用類型變量指向了子類的對(duì)象;接口的引用類型變量指向了接口實(shí)現(xiàn)類的對(duì)象;這種情況是存在于繼承或者實(shí)現(xiàn)關(guān)系中,多態(tài)情況下,子父類存在同名的成員變量時(shí),訪問的都是父類的成員,除了在同名非靜態(tài)函數(shù)時(shí)才是訪問子類的。
三、常用關(guān)鍵字
1、This關(guān)鍵字
this關(guān)鍵字代表了所屬函數(shù)的調(diào)用者對(duì)象,如果存在同名成員變量與局部變量時(shí),在方法內(nèi)部默認(rèn)是訪問局部變量的數(shù)據(jù),可以通過this關(guān)鍵字指定訪問成員變量的數(shù)據(jù),在一個(gè)構(gòu)造函數(shù)中可以調(diào)用另外一個(gè)構(gòu)造函數(shù)初始化對(duì)象。
2、Static關(guān)鍵字
static修飾成員變量:如果有數(shù)據(jù)需要被共享給所有對(duì)象使用時(shí),那么就可以使用static修飾。
static修飾成員函數(shù):該靜態(tài)方法不依賴于任何對(duì)象就可以進(jìn)行訪問,非靜態(tài)成員方法/變量都必須依賴具體的對(duì)象才能夠被調(diào)用。
static修飾代碼塊:static關(guān)鍵字用來包裝靜態(tài)代碼塊以提升程序性能,靜態(tài)代碼塊可以置于類中的任何地方,在類初次被加載的時(shí)候,會(huì)依次執(zhí)行一次每個(gè)靜態(tài)代碼塊。
3、Super關(guān)鍵字
super關(guān)鍵字代表了父類空間的引用,子父類存在著同名的成員時(shí),在子類中默認(rèn)是訪問子類的成員,可以通過super關(guān)鍵字指定訪問父類的成員;創(chuàng)建子類對(duì)象時(shí),默認(rèn)會(huì)先調(diào)用父類無參的構(gòu)造方法,可以通過super關(guān)鍵字指定調(diào)用父類的構(gòu)造方法。
4、Instanceof關(guān)鍵字
instanceof關(guān)鍵字的作用:判斷一個(gè)對(duì)象是否屬于指定的類別,對(duì)象與指定的類別必須要存在繼承或者實(shí)現(xiàn)的關(guān)系。在強(qiáng)制類型轉(zhuǎn)換之前通常會(huì)使用該關(guān)鍵字先判斷,然后在進(jìn)行轉(zhuǎn)換。
5、Final關(guān)鍵字
final修飾類:表明該類不能被繼承,final類中的成員變量可以根據(jù)需要設(shè)為final,但是要注意final類中的所有成員方法都會(huì)被隱式地指定為final方法。
final修飾方法:鎖定方法防止任何繼承類修改它的含義;第二個(gè)原因是效率,父類的final方法是不能被子類所覆蓋的。
final修飾變量:成員變量被標(biāo)識(shí)為常量,只能被賦值一次,賦值后值不再改變,當(dāng)函數(shù)的參數(shù)類型聲明為final時(shí),說明該參數(shù)是只讀型的。
6、Abstract關(guān)鍵字
abstract修飾類:該抽象類不能被實(shí)例化,抽象類與接口的不同之處,接口中不能有實(shí)例方法去實(shí)現(xiàn)業(yè)務(wù)邏輯,而抽象類中可以有實(shí)例方法,并實(shí)現(xiàn)業(yè)務(wù)邏輯,抽象類不能使用final關(guān)鍵字修飾,因?yàn)閒inal修飾的類是無法被繼承,而對(duì)于抽象類來說就是需要通過繼承去實(shí)現(xiàn)抽象方法。
abstract修飾方法:抽象方法沒有方法主體,與接口方法有點(diǎn)類似,抽象方法不能用private修飾,因?yàn)槌橄蠓椒ū仨毐蛔宇悓?shí)現(xiàn),抽象方法也不能用static修飾,抽象類.抽象方法這樣的操作沒有意義。
四、場景分析
1、設(shè)計(jì)模式
面向?qū)ο笈c設(shè)計(jì)模式是之前幾年很火熱的概念,面試時(shí)必問的問題,在編程中想用好設(shè)計(jì)模式,前提理解面向?qū)ο髾C(jī)制,都是對(duì)問題的高度向上抽象封裝,向下逐層解決實(shí)現(xiàn),提高代碼的復(fù)用性、可讀性、靈活性、可維護(hù)性強(qiáng),最主要是格調(diào)高。
2、IO流體系
如果想理解面向?qū)ο蠛驮O(shè)計(jì)模式的代碼,在Java中可以重點(diǎn)讀讀IO流體系的API,頂級(jí)接口,向下實(shí)現(xiàn),包裝類,擴(kuò)展類,是真的把這兩大理念用到極致了,當(dāng)然IO流最為文件處理的核心,也值得讀讀源碼。
3、MVC開發(fā)模式
在MVC的開發(fā)模式中,業(yè)務(wù)層接口,業(yè)務(wù)層實(shí)現(xiàn);數(shù)據(jù)庫接口,數(shù)據(jù)訪問實(shí)現(xiàn),也是面向?qū)ο蟮淖罨A(chǔ)用法接口與接口的實(shí)現(xiàn)類。
五、源代碼地址
GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile推薦閱讀:編程體系整理
| 01 | Java描述設(shè)計(jì)模式,算法,數(shù)據(jù)結(jié)構(gòu) | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆☆ |
| 02 | Java基礎(chǔ)、并發(fā)、面向?qū)ο蟆eb開發(fā) | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆ |
| 03 | SpringCloud微服務(wù)基礎(chǔ)組件案例詳解 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆ |
| 04 | SpringCloud微服務(wù)架構(gòu)實(shí)戰(zhàn)綜合案例 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基礎(chǔ)應(yīng)用入門到進(jìn)階 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合開發(fā)常用中間件 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆☆ |
| 07 | 數(shù)據(jù)管理、分布式、架構(gòu)設(shè)計(jì)基礎(chǔ)案例 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆☆ |
| 08 | 大數(shù)據(jù)系列、存儲(chǔ)、組件、計(jì)算等框架 | GitHub·點(diǎn)這里 | GitEE·點(diǎn)這里 | ☆☆☆☆☆ |
總結(jié)
以上是生活随笔為你收集整理的编程体系结构(06):Java面向对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机会只留给有准备的人
- 下一篇: java美元兑换,(Java实现) 美元