本文原始碼:GitHub·點這里 || GitEE·點這里
一、基礎概念
1、面向物件概念
面向物件編程的主要思想是把構成問題的各個事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘一個事物在整個解決問題的步驟中的行為,

2、類和物件
物件:真實存在唯一的事物;在應用程式中物件是資料和動作的結合體,不僅能夠進行操作,同時還能夠記錄下操作結果,
類:抽象的概念,實際就是對某種型別事物的共性屬性與行為的抽取;例如User[名稱.年齡.性別]類用來描述用戶的基礎資訊,
Java開發中如何理解面向物件:構建合適的物件介面API體系,創建合適的物件,解決合適的問題,例如JDK的API已經定義好的類,通過這些類創建物件直接使用;通過自定義類來創建物件使用,在MVC中模式中,不同業務功能創建不同的介面和類系統,
3、屬性和方法
類中變數
位置區別:
- 成員變數是定義在方法之外,類內;
- 區域變數是定義在方法之內,
作用區別:
- 成員變數的作用是用于描述一類事物的公共屬性的,
- 區域變數的作用就是提供一個變數給方法內部使用而已,
初始值區別:
- 成員變數是有默認的初始值,
- 區域變數是沒有默認的初始值的,必須要先初始化才能使用,
生命周期:
- 隨著物件的創建而存在,隨著物件的消失而消失,
- 區域變數在呼叫了對應的方法時執行到了創建該變數的陳述句時存在,區域變數一旦出了自己的作用域那么馬上從記憶體中消失,
類中方法
對一個類功能的具體描述,可能是類方法或者物件方法;
- 類方法,又叫靜態方法,使用類直接呼叫,常用工具類;
- 物件方法,又叫實體方法,使用類物件呼叫,常見API方法;
構造方法
建構式的作用是用來給對應的物件進行初始化處理,沒有回傳值型別的,建構式的函式名必須要與類名一致,如果一個類沒有顯式的宣告一個構造方法,那么java編譯器會為該類添加一個無參的建構式的,如果一個類已經顯式的寫上一個構造方法時,那么java編譯器則不會再為該類添加一個無參的構造方法,建構式是可以在一個類中以多載的形式存在多個,
4、介面
介面是一個特殊的類,介面的成員變數默認的修飾符為:public-static-final,介面中的方法都是抽象的方法,默認的修飾符:public-abstract,介面不能創建物件且沒有構造方法的,介面是給類去實作時使用的,非抽象類實作介面,必須要把介面中所有方法全部實作,
介面的作用:程式的解耦,定義實作類的約束規范,如果需要拓展特別功能,也可以基于介面形式實作,
類與介面之間關系:多實作關系;介面與介面之間關系:多繼承關系,
5、多載與重寫
方法重寫
父類的功能無法滿足子類的需求時,可以進行方法的重寫即子父類使用同名的函式,且子類重寫的方法使用@Override注解,這里存在繼承的關系,
- 方法名與形參串列必須一致;
- 子類的權限修飾符必須要大于或者等于父類的權限修飾符;
- 子類的回傳值型別必須要小于或者等于父類的回傳值型別;
- 子類拋出的例外型別要小于或者等于父類拋出的例外型別;
方法多載
在一個類中存在兩個或者兩個以上的同名函式,稱作為方法多載,函式名要一致,形參串列不一致(形參的個數或形參的型別不一致),
6、包與權限
權限修飾符
權限修飾符就是控制被修飾的成員的范圍可見性,分為:public、private、protected、default(沒有修飾),在不同包下面只有public 與 protected 可以訪問,而且protected必須是在繼承關系下才能夠訪問,
包package
包可以理解為計算機系統中的檔案夾,用來解決類名重復產生沖突的問題,包名全部小寫,陳述句必須位于java檔案中中第一個陳述句,
二、基本特征
封裝
把類中內部的實作細節進行隱藏,只暴露對外的介面,例如實際開發場景中一般物體類的所有成員屬性(成員變數)都要封裝起來,可以被認為是一個保護屏障,防止該類的代碼和資料被外部類定義的代碼隨機訪問,適當的封裝可以讓程式代碼更容易理解與維護,加強安全性,
繼承
在現有父類的基礎上在重新構建一個新類即子類,通過子類物件可以訪問父類非私有的成員變數和成員方法,以及重寫父類中的非私有成員方法,繼承的作用就是能提高代碼的復用性,
多型
多型指一個物件可以具備多種形態,例如:父類的參考型別變數指向了子類的物件;介面的參考型別變數指向了介面實作類的物件;這種情況是存在于繼承或者實作關系中,多型情況下,子父類存在同名的成員變數時,訪問的都是父類的成員,除了在同名非靜態函式時才是訪問子類的,
三、常用關鍵字
1、This關鍵字
this關鍵字代表了所屬函式的呼叫者物件,如果存在同名成員變數與區域變數時,在方法內部默認是訪問區域變數的資料,可以通過this關鍵字指定訪問成員變數的資料,在一個建構式中可以呼叫另外一個建構式初始化物件,
2、Static關鍵字
static修飾成員變數:如果有資料需要被共享給所有物件使用時,那么就可以使用static修飾,
static修飾成員函式:該靜態方法不依賴于任何物件就可以進行訪問,非靜態成員方法/變數都必須依賴具體的物件才能夠被呼叫,
static修飾代碼塊:static關鍵字用來包裝靜態代碼塊以提升程式性能,靜態代碼塊可以置于類中的任何地方,在類初次被加載的時候,會依次執行一次每個靜態代碼塊,
3、Super關鍵字
super關鍵字代表了父類空間的參考,子父類存在著同名的成員時,在子類中默認是訪問子類的成員,可以通過super關鍵字指定訪問父類的成員;創建子類物件時,默認會先呼叫父類無參的構造方法,可以通過super關鍵字指定呼叫父類的構造方法,
4、Instanceof關鍵字
instanceof關鍵字的作用:判斷一個物件是否屬于指定的類別,物件與指定的類別必須要存在繼承或者實作的關系,在強制型別轉換之前通常會使用該關鍵字先判斷,然后在進行轉換,
5、Final關鍵字
final修飾類:表明該類不能被繼承,final類中的成員變數可以根據需要設為final,但是要注意final類中的所有成員方法都會被隱式地指定為final方法,
final修飾方法:鎖定方法防止任何繼承類修改它的含義;第二個原因是效率,父類的final方法是不能被子類所覆寫的,
final修飾變數:成員變數被標識為常量,只能被賦值一次,賦值后值不再改變,當函式的引數型別宣告為final時,說明該引數是只讀型的,
6、Abstract關鍵字
abstract修飾類:該抽象類不能被實體化,抽象類與介面的不同之處,介面中不能有實體方法去實作業務邏輯,而抽象類中可以有實體方法,并實作業務邏輯,抽象類不能使用final關鍵字修飾,因為final修飾的類是無法被繼承,而對于抽象類來說就是需要通過繼承去實作抽象方法,
abstract修飾方法:抽象方法沒有方法主體,與介面方法有點類似,抽象方法不能用private修飾,因為抽象方法必須被子類實作,抽象方法也不能用static修飾,抽象類.抽象方法這樣的操作沒有意義,
四、場景分析
1、設計模式
面向物件與設計模式是之前幾年很火熱的概念,面試時必問的問題,在編程中想用好設計模式,前提理解面向物件機制,都是對問題的高度向上抽象封裝,向下逐層解決實作,提高代碼的復用性、可讀性、靈活性、可維護性強,最主要是格調高,
2、IO流體系
如果想理解面向物件和設計模式的代碼,在Java中可以重點讀讀IO流體系的API,頂級介面,向下實作,包裝類,擴展類,是真的把這兩大理念用到極致了,當然IO流最為檔案處理的核心,也值得讀讀原始碼,
3、MVC開發模式
在MVC的開發模式中,業務層介面,業務層實作;資料庫介面,資料訪問實作,也是面向物件的最基礎用法介面與介面的實作類,
五、源代碼地址
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
推薦閱讀:編程體系整理
| 序號 | 專案名稱 | GitHub地址 | GitEE地址 | 推薦指數 |
|---|---|---|---|---|
| 01 | Java描述設計模式,演算法,資料結構 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 02 | Java基礎、并發、面向物件、Web開發 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 03 | SpringCloud微服務基礎組件案例詳解 | GitHub·點這里 | GitEE·點這里 | ☆☆☆ |
| 04 | SpringCloud微服務架構實戰綜合案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合開發常用中間件 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 07 | 資料管理、分布式、架構設計基礎案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 08 | 大資料系列、存盤、組件、計算等框架 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/163394.html
標籤:Java
