當前位置:
首頁 > 知識 > 一張圖搞定Java面向對象

一張圖搞定Java面向對象

剛開始學習Java的時候,一個人跌跌撞撞摸索著往前走,很多東西理解的也懵懵懂懂,後來實踐的多了,才慢慢清楚;許多東西雖然很基礎但是卻很重要,是需要反覆思考和加深理解的。頭條號「一張圖學Java」,分享一些歸納總結後的技術乾貨,一張圖能搞定的事,絕對不長篇大論。

大家都知道,Java面向對象是Java的一個核心,也是初學者的一個難點,所以我們從這裡開始,Let』s go !

Java面向對象

面向對象(Oriented Object)

是相對於面向過程而言的,過程其實就是函數,對象是將函數和屬性進行了封裝。

(1)將複雜的事情簡單化。

(2)面向對象將以前的過程中的執行者,變成了指揮者。

(3)面向對象思想是符合人們思考習慣的一種思想。

面向對象和面向過程區別

- 面向過程:事物比較簡單,可以用線性的思維去解決。

- 面向對象:事物比較複雜,使用簡單的線性思維無法解決。

- 共同點:都是解決實際問題的一種思維方式。解決複雜問題,通過面向對象方式便於我們從宏觀上把握事物之間複雜的關係,方便我們分析整個系統;具體到微觀操作,仍然使用面向過程方式來處理。

對象

接收消息的實體,一切皆為對象,對象都有屬性和行為,對象都屬於某個類,每個對象都是獨一無二的。

創建對象的藍圖和模板

類的屬性:數據抽象

類的方法:行為抽象

構造器(構造方法)

介面

抽象方法的集合

(1)作用:

- 能力,實現一個介面就代表具備了某方面的能力。

- 約定,一個類實現了介面就必須實現介面中的所有抽象方法否則要被聲明為抽象類。

- 角色,一個類可以實現多個介面來扮演多種角色

(2)介面之間可以繼承而且支持多重繼承

(3)從Java 8開始介面中的方法允許有默認實現

(4)常見的介面用法

- 單方法介面(函數式介面):Lambda表達式、@FunctionalInterface

- 標識性介面

- 普通介面

- 常量介面(介面最不正確的用法)

Java面向對象語言的三大特點

- 繼承:從已有類創建新類的過程。

父類(超類/基類):提供繼承信息的類

子類(派生類):得到繼承信息的類

- 封裝:隱藏一切可隱藏的實現細節提供簡單的編程介面。私有屬性,公有方法。好處:將變化隔離;便於使用;提高重用性,安全性。

- 多態:

方法重寫:子類對父類的方法給出自己的實現版本。

對象造型:用父類型的引用去引用子類對象。

成員

定義在類中。成員有兩種:

(1)成員變數:其實對應的就是事物的屬性。

(2)成員函數:其實對應的就是事物的行為。

局部變數和成員變數的區別

(1)成員變數直接定義在類中。

局部變數定義在方法中,參數上,語句中。

(2)成員變數在這個類中有效。

局部變數只在自己所屬的大括弧內有效,大括弧結束,局部變數失去作用域。

(3)成員變數定義在堆內存中,隨著對象的產生而存在,消失而消失。

局部變數存在於棧內存中,隨著所屬區域的運行而存在,結束而釋放。

構造函數

用於給對象進行初始化 ,函數中的一種。構造函數是在對象創建時被調用的,而且 初始化動作只執行一次 。

特點:該函數的名稱和所在類的名稱相同。不需要指定返回值類型。該函數沒有具體的返回值。

注意:在定義一個類的時候,如果沒有定義一個構造函數,系統會自動生成一個無參構造函數,以便於該類對象的創建和初始化。如果類中自定了構造函數,那麼默認的構造函數沒有了。如果一個類中有多個構造函數,這些構造函數是以重載體現的。

構造代碼塊和構造函數的區別

構造代碼塊:是給所有的對象進行初始化 ,只要對象一建立就會調用這個代碼塊。

構造函數:是給與之對應的對象進行初始化。

創建一個對象內存中執行過程

Person p = new Person();

(1)將硬碟中指定位置的Person.class文件載入進內存。

(2)執行main方法時,在棧內存中開闢了main方法的空間(壓棧-進棧),然後在main方法的棧區分配了一個變數P。

(3)new。在堆內存中開闢一個實體空間,分配了一個內存首地址值。

(4)在該實體空間中進行屬性的空間分配,並進行了默認初始化。

(5)對空間中的屬性進行顯示初始化。

(6)進行實體的構造代碼塊初始化。

(7)調用該實體對應的構造函數,進行構造函數初始化。

(8)將首地址賦值給p,p變數就引用了該實體。(指向了該對象)

this關鍵字

代表對象。就是所在函數所屬對象的引用。哪個對象調用了this所在的函數,this就代表哪個對象。

this是方法(除靜態方法外)中存在的隱式參數,所以在方法中使用this。

普通方法中,this總是指向調用該方法的對象。this.xx; (調用的是成員屬性和成員方法)

構造方法中,this總是指向正要初始化的對象。this(...); (調用本類對應參數的構造函數)

注意:

(1)this調用構造函數,必須定義在構造函數的第一行。否則編譯失敗。

(2)this不能用於static修飾的方法。

static關鍵字

關鍵字,是一個修飾符,用於修飾成員(成員變數和成員函數)

在類中,用static聲明的成員變數為靜態變數,或者叫做:類屬性,類變數, 從屬於類,給對象分配的內存里沒有。

它為類的公用變數,屬於類,被該類的所有實例共享,在類被載入時被顯示初始化,

對於該類的所有對象來說,static成員變數只有一份。被該類的所有對象共享。

可以使用「對象.類屬性」來調用。不過,一般都是用「類名.類屬性」。

static變數置於方法區中。

用static聲明的方法為靜態方法。

類名.方法名的方式調用。

在調用該方法時,不會將對象的引用傳遞給它,所以在static方法中,不可訪問非static的成員。

在靜態方法中,不能是用this和supper關鍵字。

成員變數和靜態變數的區別

(1)成員變數所屬與對象,所以也稱為實例變數。

靜態變數所屬於類,所以也稱為類變數。

(2)成員變數存在於堆內存中。

靜態變數存在於方法區中。

(3)成員變數隨著對象的創建而存在,隨著對象被回收而消失。

靜態變數隨著類的載入而存在,隨著類的消失而消失。

(4)成員變數只能被對象所調用。

靜態變數可以被對象調用,也可以被類名調用。

所以,成員變數可以稱為對象的特有數據,靜態變數稱為對象的共享數據。

靜態代碼塊

就是一個有靜態關鍵字標示的一個代碼塊區域。定義在類中。

作用:可以完成類的初始化 。靜態代碼塊隨著類的載入而執行,而且只執行一次。如果和主函數在同一個類中,優先於主函數執行。

靜態代碼塊、構造代碼塊、構造函數同時存在時的執行順序

靜態代碼塊-->構造代碼塊-->構造函數。

繼承

(1)類是對對象的抽象,繼承是對某一批類的抽象,從而實現對現實世界更好的建模。

(2)提高代碼的復用性。

(3)extends的意思是「擴展」。子類是父類的擴展。

(4)子類繼承父類,可以得到父類的全部屬性和方法(除了父類的構造方法)。

(5)Java中只有單繼承,沒有多繼承。多繼承會引起混亂,使得繼承鏈過於複雜,系統難於維護。

(6)Java中的多繼承,可以通過介面來實現。

(7)java.lang.Object是所有類的超類。

重載(overload)

方法的重載是指一個類中可以定義有相同的名字,但參數不同的多個方法。調用時,會根據不同的參數表選擇對應的方法。

同一個類,同一個方法名。

不同:參數列表不同(類型,個數,順序不同)

只有返回值不同,不構成方法的重載。

方法重寫(override)

在子類中可以根據需要對從父類中繼承來的方法進行重寫。

重寫方法必須和被重寫方法具有相同方法名稱、參數列表和返回類型。

重寫方法不能使用比被重寫方法更嚴格的訪問許可權。(由於多態)

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

畢業迷茫?java如何輕鬆高薪就業
Java入門第二季6.1項目代碼
能打出這樣的網頁,找不到女朋友你找我!

TAG:java學習吧 |

您可能感興趣

Lua 面向對象
Perl 面向對象
面向不同需求的對象存儲系統對比:Ceph與Swift
Unity 編輯器現已正式面向 Linux 推出
Python指南:面向對象程序設計
蘋果AppleCare+for Mac正式面向中國市場推出
TensorFlow官方最新tf.keras指南:面向對象構建深度網路
AppleCare+ for Mac正式面向中國市場推出
面向未來的工作?——《Unnatural death》告訴你
Python面向對象之魔法方法/雙下方法
Python入門基礎之面向對象四:運算符重載
Google面向入門用戶的Android Go,現在有一個好的開始
華為面向西歐市場正式推出融合快閃記憶體陣列OceanStor V5
如何評價OPPO面向印度線上市場推出的Realme1?
Fitbit面向合作夥伴推出Inspire健身追蹤器 概不零
思科聯合Pure Storage發布面向AI的FlashStack融合系統
Mentor面向智能家居的IoT方案
Facebook Reality Labs正式成立面向VR/AR開發
[圖]不亞於WannaCry:微軟面向Windows XP發布緊急修復補丁
谷歌 I/O 開發者大會上的 Smart Compose 功能開始面向 Gmail 桌面用戶公測