摘要:前言是面對對象的語言,因此有必要多帶帶紀(jì)錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發(fā)就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。面對對象設(shè)計(jì)其實(shí)就是在管理和維護(hù)對象之間的關(guān)系。
前言
java是面對對象的語言,因此有必要多帶帶紀(jì)錄下對象的各種定義和理解。
面對對象,主要包括:面向?qū)ο笏枷耄惻c對象及其使用,對象的內(nèi)存圖,成員變量和局部變量的區(qū)別,匿名對象,封裝(private),this關(guān)鍵字,構(gòu)造方法,static關(guān)鍵字。
面對對象基本概述概述:是基于面向過程的變成思想,是對面向過程的一種封裝。
面對對象開發(fā):就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。
面對對象設(shè)計(jì):其實(shí)就是在管理和維護(hù)對象之間的關(guān)系。
面對對象特征:封裝,繼承,多態(tài)
類與對象的關(guān)系:
(1)類:一組相關(guān)的屬性和行為的集合 (2)對象:是該類事物的具體體現(xiàn)
匿名對象:
(1)就是沒有名字的對象,是對象的一種簡化表示形式 (2)匿名對象的兩種使用情況:1、對象調(diào)用方法僅僅一次的時(shí)候 2、作為實(shí)際參數(shù)傳遞類的相關(guān)概述:
Student s = new Student();在內(nèi)存中做了哪些事情?
(1)加載Student.class文件進(jìn)入內(nèi)存 (2)在棧空間為s開辟空間 (3)在堆內(nèi)存為學(xué)生對象開辟空間 (4)對學(xué)生對象的成員變量進(jìn)行默認(rèn)初始化 (5)對學(xué)生對象的成員變量進(jìn)行顯示初始化 (6)通過構(gòu)造方法對學(xué)生對象的成員變量賦值 (7)學(xué)生對象初始化完畢,把對象地址賦值給s變量
類 基本包括:繼承、多態(tài)、抽象類、接口、包和導(dǎo)包、權(quán)限修飾符、內(nèi)部類
類的繼承概述:多個(gè)類中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到多帶帶一個(gè)類中,那么多個(gè)類無需再定義這些屬性和行為,只要繼承這個(gè)類即可。
通過extends這個(gè)關(guān)鍵字可以實(shí)現(xiàn)類與類到繼承
多帶帶的這個(gè)類稱為父類或者基類、超類,這多個(gè)類可以稱為子類或者派生類
有了繼承后,我們定義一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)上,定義自己的新成員
好處:
(1)提高了代碼的復(fù)用性 (2)提高代碼的維護(hù)性 (3)讓類與類之間產(chǎn)生了關(guān)系,是多態(tài)的前提 (4)類的一個(gè)弊端就是,類的耦合性很強(qiáng)
注意事項(xiàng):
(1)子類只能繼承父類所有非私有成員(成員方法和成員變量) (2)字類不能繼承父類的構(gòu)造方法,但是可以通過super關(guān)鍵字訪問父類的構(gòu)造方法 (3)不要為類部分功能而去繼承
繼承中構(gòu)造方法的關(guān)系:
(1)子類中所有的構(gòu)造方法都默認(rèn)會父類中空參數(shù)的構(gòu)造方法 (2)因?yàn)樽宇悤^承父類的數(shù)據(jù),可能還會使用父類的數(shù)據(jù)。所以,子類初始化之前,一定要先完成父類數(shù)據(jù)的初始化 (3)每一個(gè)構(gòu)造方法的第一條語句默認(rèn)是:super() (4)如果父類中沒有構(gòu)造方法怎么辦: 【1】子類通過super去顯示調(diào)用父類其他的帶參的構(gòu)造方法 【2】子類通過this調(diào)用本類的其他構(gòu)造方法 【3】一定要注意,super()后者this()必須出現(xiàn)在第一條語句中,否則,就會有父類數(shù)據(jù)的多次初始化
方法重寫:
(1)概述:子類中出現(xiàn)了一個(gè)和父類一摸一樣的方法聲明,也被稱為方法覆蓋,方法復(fù)寫 (2)父類中的私有方法不能被重寫 (3)子類重寫父類方法時(shí),訪問權(quán)限不能更低 (4)父類靜態(tài)方法,子類也必須通過靜態(tài)方法進(jìn)行重寫幾個(gè)關(guān)鍵字:static、super、final
static關(guān)鍵字:
(1)可以修飾成員變量和成員方法 (2)特點(diǎn): 【1】隨著類的加載而加載 【2】優(yōu)先于對象存在 【3】被類的所有對象共享 【4】可以通過類名調(diào)用 (3)注意事項(xiàng): 【1】在靜態(tài)方法中是沒有this關(guān)鍵字的 【2】靜態(tài)方法只能訪問靜態(tài)的成員變量和靜態(tài)的成員方法 (4)靜態(tài)變量和成員變量的區(qū)別: 【1】靜態(tài)變量屬于類,所以也成為類變量;成員變量屬于對象,所以也稱為實(shí)例變量 【2】靜態(tài)變量存儲在方法區(qū)的靜態(tài)區(qū),成員變量存儲在堆內(nèi)存中 【3】靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失;成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失 【4】靜態(tài)變量可以通過類名調(diào)用,也可以通過對象調(diào)用;成員變量只能通過對象名調(diào)用
super關(guān)鍵字:
(1)super和this關(guān)鍵字的用法很像,this代表本類對應(yīng)的引用,super代表父類存儲空間的標(biāo)識(可以理解為父類的引用) (2)使用super來引用父類的成分,用this來引用當(dāng)前對象
final關(guān)鍵字:
(1)final關(guān)鍵字是最終的意思,可以修飾類、成員變量、成員方法 (2)修飾類,類不能被繼承 (3)修飾變量,變量就變成了常量,只能被賦值一次 (4)修飾方法,方法不能被重寫多態(tài)
概述:某一個(gè)事物,在不同時(shí)刻表現(xiàn)出來的不同狀態(tài)
多態(tài)的前提和體現(xiàn):有繼承關(guān)系,有方法重寫,有父類引用直接指向子類對象
好處:
(1)提高程序的維護(hù)性(由繼承保證) (2)提高程序的擴(kuò)展性(由多態(tài)保證)
弊端:不能訪問子類特有功能
抽象類概述:一個(gè)沒有方法體的方法應(yīng)該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類
特點(diǎn):
(1)抽象類和抽象方法必須是由abstract關(guān)鍵字修飾 (2)抽象類不一定有抽象方法,有抽象方法的類一定是抽象類 (3)抽象類不能實(shí)例化 (4)那么,抽象類如何實(shí)例化?按照多態(tài)的方法,由具體的子類實(shí)例化 (5)抽象類的子類,要么是抽象類,要么重寫抽象類中的所有抽象方法
抽象類成員特點(diǎn):
(1)成員變量可以是變量,也可以是常量 (2)有構(gòu)造方法,但是不能實(shí)例化。那么構(gòu)造方法的作用是什么?用戶子類訪問父類數(shù)據(jù)的初始化 (3)可以有抽象方法,限定子類必須完成某些動作 (4)也可以有非抽象方法,提高代碼復(fù)用性 (5)抽象方法必須為public或protected(因?yàn)槿绻莗rivate,則不能被子類繼承,子類便無法實(shí)現(xiàn)該方法),缺省情況下默認(rèn)為public接口
概述:英文成為interface,軟件工程中,接口泛指供別人調(diào)用的方法或函數(shù),它是對行為的抽象
接口特點(diǎn):
(1)使用關(guān)鍵字interface表示:interface 接口名{} (2)類實(shí)現(xiàn)接口用implements表示:class 類名 implements 接口名{} (3)接口不能實(shí)現(xiàn)實(shí)例化,但是可以按照多態(tài)的方式,由具體的子類實(shí)例化 (4)接口的子類:要么是抽象類,要么重寫接口中的所有抽象方法
接口成員特點(diǎn):
(1)成員變量:只能是常量,默認(rèn)修飾符是public、static、final (2)沒有構(gòu)造方法,因?yàn)榻涌谥饕菙U(kuò)展功能的,而沒有具體存在 (3)接口的成員方法只能是抽象方法,默認(rèn)修飾符是public、abstract類與類、類與接口、接口與接口關(guān)系
類與類:繼承關(guān)系,只能單繼承,但是可以多層繼承
類與接口:實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。還可以在繼承一個(gè)類多同時(shí)實(shí)現(xiàn)多個(gè)接口
接口與接口:繼承關(guān)系,可以單繼承,也可以多繼承
抽象類與接口的區(qū)別:接口是對動作的抽象,抽象類是對根源的抽象
抽象類表示的是這個(gè)對象是什么,而接口表示的是這個(gè)對象能做什么
抽象類與接口都不能被實(shí)例化,如果要實(shí)例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象
抽象類要被子類繼承,接口要被類實(shí)現(xiàn)
接口只能做方法聲明,抽象類中可以做方法聲明,也可做方法實(shí)現(xiàn)
接口中定義的變量只能是公共的靜態(tài)常量,抽象類中的變量是普通變量
抽象類里邊的抽象方法必須被子類所實(shí)現(xiàn),如果子類不能全部實(shí)現(xiàn)父類抽象方法,那么該子類只能是抽象類。同理,一個(gè)實(shí)現(xiàn)接口的時(shí)候,如果不能全部實(shí)現(xiàn)接口方法,那么該類也只能是抽象類
抽象方法只能聲明,不能實(shí)現(xiàn)。接口是設(shè)計(jì)的結(jié)果,抽象類是重構(gòu)的結(jié)果
接口可以繼承接口,并可繼承多接口,但是類只能單繼承
抽象類可以有具體的方法和屬性,接口只能有抽象方法和不可變常量
當(dāng)你關(guān)注一個(gè)事物的本質(zhì)的時(shí)候,用抽象類;當(dāng)你關(guān)注一個(gè)操作的時(shí)候用接口。
包:package概述:其實(shí)就是文件夾,對類進(jìn)行分類管理
定義:package 包名
注意事項(xiàng):
(1)package語句必須是程序的第一條可執(zhí)行的代碼 (2)package語句在一個(gè)java文件中只能有一個(gè) (3)如果沒有package,默認(rèn)表示無包名
帶包的類的編譯和運(yùn)行:
(1)手動式: 【1】javac編譯當(dāng)前類文件 【2】手動建立包對應(yīng)的文件夾 【3】把編譯生成的class文件放到上一步建立的文件夾下 【4】通過java命令執(zhí)行,需要帶包的名稱執(zhí)行:java testpackage.HelloWorld (2)自動式: 【1】javac編譯的時(shí)候帶-d參數(shù)執(zhí)行:javac -d .HelloWorld.java 【2】通過java命令執(zhí)行,和手動式一樣
導(dǎo)包:
(1)概述:不同包下的類之間的訪問,我們發(fā)現(xiàn),每次使用不同包下的類的時(shí)候,都需要加包的全路經(jīng),比較麻煩。這時(shí),java提供了導(dǎo)包功能 (2)導(dǎo)包格式:import 包名.類名內(nèi)部類
概述:把類定義在其他類的內(nèi)部,這個(gè)類就被成為內(nèi)部類
訪問特點(diǎn):
(1)內(nèi)部類可以直接訪問外部類的成員,包括私有 (2)外部類要想內(nèi)部類的成員,必須創(chuàng)建對象
內(nèi)部類位置:
(1)按照內(nèi)部類在類中定義的位置不同,可以分為兩種格式:成員位置(成員內(nèi)部類),局部位置(局部內(nèi)部類) (2)成員內(nèi)部類: 【1】常見修飾符:private,static 【2】被靜態(tài)修飾的成員內(nèi)部類只能訪問外部類的靜態(tài)成員 (3)局部內(nèi)部類: 【1】可以直接訪問外部類的成員 【2】可以創(chuàng)建內(nèi)部類對象,通過對象調(diào)用內(nèi)部類方法,來使用局部內(nèi)部類功能 【3】局部內(nèi)部類訪問局部變臉必須用final修飾。因?yàn)榫植孔兞繒S著方法的調(diào)用完畢而消失,這個(gè)時(shí)候,局部對象并沒有立馬從堆內(nèi)存消失,還要使用那個(gè)變量。為了讓數(shù)據(jù)還能繼續(xù)被使用,就用final修飾,這樣,在堆內(nèi)存里面存儲的其實(shí)是一個(gè)常量值。 (4)匿名內(nèi)部類: 【1】就是內(nèi)部類的簡化寫法 【2】格式:new 類名或接口名(){} 【3】前提:存在一個(gè)類或者接口,這里的類可以是具體的普通的類,也可以是抽象類 【4】本質(zhì):是一個(gè)繼承了類或者實(shí)現(xiàn)了接口的子類匿名對象 【5】可以說,匿名內(nèi)部類其實(shí)就是一個(gè)子類匿名對象
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/76928.html
摘要:在不考慮通脹和工資增長的情況下,除去吃喝需要攢年才能攢出一線城市房子的首付,以這樣的收入水平,基本上沒法扎根。 簡單算一筆賬,目前小公司Java后端工資一般是1萬出頭,年薪普遍在20萬以下。在不考慮通脹和工資增長的情況下,除去吃喝需要攢30年才能攢出一線城市房子的首付,以這樣的收入水平,基本...
摘要:寄存器本書沒有做很多說明,不做解釋棧,這個(gè)區(qū)域在的區(qū)域里面。有一個(gè)這個(gè)指針的上移來刪除釋放內(nèi)存,下移來存儲。重點(diǎn)就是這里面常常用來存儲對象。常量存儲,這個(gè)區(qū)域在的區(qū)域。本章的聯(lián)系很明顯。 引言 從這一章的標(biāo)題我們就可以很容易知道這章主要講的還是作為Java語言最大的一個(gè)特性(面向?qū)ο螅_@個(gè)跟自己開始學(xué)習(xí)Java不同,一開始學(xué)習(xí)一門語言都是直接從語法開始,但是這本書是從Java的思想開...
閱讀 3996·2021-11-24 09:39
閱讀 1898·2021-11-02 14:41
閱讀 939·2019-08-30 15:53
閱讀 3556·2019-08-29 12:43
閱讀 1294·2019-08-29 12:31
閱讀 3164·2019-08-26 13:50
閱讀 887·2019-08-26 13:45
閱讀 1088·2019-08-26 10:56