0.方法簽名:方法名+參數(shù)列表
1.方法的重載(Overload):
(1)、方法名相同,參數(shù)列表不同,
(2)、在編譯器在編譯時(shí)根據(jù)方法的簽名自動(dòng)綁定調(diào)用方法
2.構(gòu)造方法:
(1)、給成員變量賦初值
(2)、沒有返回值類型
(3)、在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用
(4)、
3.this:
只能用在方法里,放在中訪問成員變量之前默認(rèn)有,當(dāng)成員變量與局部變量重名時(shí),this.不能省略
用法:this.成員變量名----------訪問成員變量
this.方法名()-----------調(diào)用方法(一般不用)
this()調(diào)用構(gòu)造方法
4:null和NullPointerException:
null:空,沒有指向任何對(duì)象
若操作發(fā)生NullPointerException:空指針異常
5:引用類型變量畫等號(hào):
(1)、指向同一個(gè)對(duì)象
(2)、通過一個(gè)引用對(duì)數(shù)據(jù)的修改會(huì)影響另一個(gè)引用對(duì)數(shù)據(jù)的值
基本類型變量畫等號(hào):
(1)、賦值
(2)、對(duì)一個(gè)變量的修改不會(huì)影響另一個(gè)變量的訪問
內(nèi)存管理:由JVM來管理的
(1)、堆:new出來的對(duì)象(包括成員變量)
(2)、棧:局部變量(包括方法參數(shù))
(3) 、方法區(qū):.class字節(jié)碼文件(包括方法)
回顧:
1、方法的重載:
(1)、發(fā)生在一個(gè)類中,參數(shù)列表不同,方法體不同
(2)、編譯器在編譯時(shí)根據(jù)方法的簽名自動(dòng)綁定調(diào)用的方法
2、構(gòu)造方法:
(1)、給成員變量賦初值、與類同名,沒有返回值類型
(2)、創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用
(3)、若自己不寫,則默認(rèn)無參構(gòu)造自己寫了則不再默認(rèn)無參構(gòu)造
3、this:
哪個(gè)對(duì)象調(diào)用方法指的就是那個(gè)對(duì)象
this.成員變量-------------------訪問成員變量
this.方法名----------------------調(diào)用方法
this()-------------------------調(diào)用構(gòu)造方法
4、null:空,沒有指向任何對(duì)象
引用的值為null
1、引用類型數(shù)組:
(1)、Student [] stus = new Student[10];
stus[0] = new Student();
stus[0].age = 25;
Student [] stus = new Student []{
new Student(),
new Student(),
new Student()
}
基本類型變量---------------------裝具體的數(shù)
引用類型變量---------------------裝地址
(2)
//聲明int[]的數(shù)組,包含3個(gè)元素
//每個(gè)元素都是int[]型
int [][] arr = new [3][];
arr[0] = new int[2];
arr[1] = new int[3];
//給arr中第二個(gè)元素中的第一個(gè)元素賦值為100
arr[1][0] = 100;
arr-------------------------------int[][]
arr[0]----------------------------int []
arr[0][0]-------------------------int
(3) //數(shù)組的數(shù)組
int [][] arr = new int[3][];
arr[0] = new int [2];
arr[1] = new int [3];
arr[2] = new int [2];
arr[1][0] = 100; //給arr第二個(gè)元素中第一個(gè)元素賦值100
(4)int [][] arr = new int[3][4];
for(int i = 0;i<arr.length;i++){
for(int j = 0;j<arr[i].length;j++){
arr[i][j] = (int)(Math.random*100));
}
}
2、繼承:
(1)、作用:代碼復(fù)用
(2)、通過extends來實(shí)現(xiàn)繼承
(3)、超類/父類:所有派生類所共有的屬性和行為
派生類/子類:派生類所特有的屬性和行為
(4)、派生類繼承超類后,派生類具有:派生類的+超類的
(5)、一個(gè)超類可以有多個(gè)派生類,一個(gè)派生類只能繼承一個(gè)超類
(6)、繼承具有傳遞性
(7)、java規(guī)定:構(gòu)造派生類之前必須先構(gòu)造超類
派生類中若沒有調(diào)用超類的構(gòu)造方法,則默認(rèn)super()調(diào)用超類的無參構(gòu)造方法
派生類若調(diào)用了超類的構(gòu)造方法,則不再默認(rèn)
super()調(diào)用構(gòu)造方法,必須放在派生類構(gòu)造方法的第一句話。
3:super:指代當(dāng)前對(duì)象的超類對(duì)象
(1)、super.成員變量名---------------------訪問超類的成員變量
(2)、super.方法名()---------------------調(diào)用類的方法
(3)、super()----------------------------調(diào)用超類的構(gòu)造方法
1、向上造型:
(1)、超類型的引用指向派生類的對(duì)象
(2)、能點(diǎn)出來什么要看引用類型
2、方法重寫:
(1)、發(fā)生在父子類中,方法名相同,參數(shù)列表相同,方法體不同。
(2)、重寫方法被調(diào)用時(shí),看對(duì)象的類型
(3)、重寫遵循“兩同兩小一大”規(guī)則:
方法名稱相同,參數(shù)列表相同;派生類方法的返回值類型小于或等于超類返回值類型,派生類方法拋出的異常小于或等于超類方法 ;派生類的訪問權(quán)限大于或等于超類方法的訪問權(quán)限。
超類返回值是void和基本類型必須相等,引用類型可以小于等于
3、重寫與重載的區(qū)別------------面試題
(1)、重寫(Override):
發(fā)生在父子類中,方法名相同,參數(shù)列表相同
遵循“運(yùn)行期”綁定,看對(duì)象的類型來調(diào)用方法
(2)、重載
發(fā)生在一個(gè)類中,方法名相同,參數(shù)列表不同
遵循“編譯期”綁定,看參數(shù)/引用的類型來綁定方法
(重載看參數(shù)/引用的類型,重寫看對(duì)象的類型)
編譯期:java源文件,經(jīng)過編譯,生成.class字節(jié)碼文件
運(yùn)行期:JVM加載.class并運(yùn)行.class
1、package:避免類的命名沖突
包名可以有層次結(jié)構(gòu),同包中的類名不可以重名
域名反寫 . 項(xiàng)目名稱 . 模塊名稱 . 類名
類的全稱:包名.類名
建議:包名的字母全部小寫
import:(1)、同包中的類可以直接訪問
(2)、不同包必須用import
2、訪問控制修飾符:(數(shù)據(jù)私有化,行為公開化)
(1)、public:公開的,任何類
(2)、protected:本類,同包類,派生類
(3)、默認(rèn)的:本類,同包類
(4)、private:私有的,本類使用
說明:類的訪問修飾,只能是public或默認(rèn)的
類中的成員
3、final:最終的、不可改變的
(1)、修飾變量:變量不可改變
(2)、修飾方法:方法不能被重寫
(3)、修飾類:類不能被繼承
4、static:靜態(tài)的
(1)、靜態(tài)變量:
(1.1)、由static修飾
(1.2)、屬于類,存儲(chǔ)在方法區(qū)中,只有一份
(1.3)、常常通過類名點(diǎn)來訪問
(1.4)、何時(shí)使用:所有對(duì)象共享的數(shù)據(jù)
(2)、靜態(tài)方法:
(2.1)、由static修飾
(2.2)、屬于類,存儲(chǔ)在方法區(qū),只有一份
(2.3)、常常有類名來調(diào)用
(2.4)、靜態(tài)方法中不能直接訪問實(shí)例成員(沒有隱式this的傳遞),但可以訪問靜態(tài)成員
(2.5)、何時(shí)用:方法的操作僅與參數(shù)相關(guān)而與對(duì)象無關(guān)
(3)、靜態(tài)塊:
(3.1)、屬于類,在類被加載期間自動(dòng)執(zhí)行,因類只被加載一次,所有靜態(tài)塊只執(zhí)行一次
(3.2)、何時(shí)用:加載/初始化靜態(tài)資源
1、static final常量:
(1)、必須聲明同時(shí)初始化
(2)、通過類名點(diǎn)來訪問
(3)、建議:常量名所有字母都大寫,多個(gè)單詞用_分隔
(4)、編譯器在編譯時(shí)將常量直接替換為具體的值,效率高
(5)、何時(shí)用:數(shù)據(jù)永遠(yuǎn)不變,并且經(jīng)常使用
2、抽象方法:
(1)、由abstract修飾
(2)、只有方法的定義,沒有方法體
3、抽象類:
(1)、由abstract修飾
(2)、包含抽象方法的類必須是抽象類(或接口)
(3)、抽象類不能實(shí)例化
(4)、抽象類是需要被繼承的,派生類:
(4.1)、重寫所有抽象方法---------------------常用
(4.2)、也聲明為抽象類-----------------------不常用
(5)、抽象類的意義:
(5.1)、可以封裝共有的屬性和行為--------代碼復(fù)用
(5.2)、為所有派生類提供統(tǒng)一的類型------向上造型
(5.3)、可以包含抽象方法,為所有派生類提供統(tǒng)一入口,派生類的具體行為不一樣,但入口是一致的
1、成員內(nèi)部類:
(1)、類中套類,外面的稱為Outer外部類,里面的稱Inter內(nèi)部類
(2)、內(nèi)部類通常只服務(wù)外部類,對(duì)外不具備可見性
(3)、內(nèi)部類對(duì)象通常只在外部類創(chuàng)建
(4)、內(nèi)部類可以直接訪問外部類成員(包括私有的)
內(nèi)部類有個(gè)隱式的
2、匿名內(nèi)部類:
(1)、若想創(chuàng)建一個(gè)類的對(duì)象,并且對(duì)象只被創(chuàng)建一次,此時(shí)該類不必命名,稱為匿名內(nèi)部類
(2)、匿名內(nèi)部類中若想訪問外面的變量,該變量是fianl(JDK1.7以前)
(3)、
MouseAdapter l = new MouseAdapter(){
public void mouseMoved(MouseEvent e){}
};
this.addMouseListener(l); //處理鼠標(biāo)操作事件
this.addMouseMotionListener(l); //處理鼠標(biāo)滑動(dòng)事件
1、接口:
(1)、由interface定義
(2)、數(shù)據(jù)類型只能是常量和抽象方法
(3)、是一種數(shù)據(jù)類型
(4)、接口不能被實(shí)例化
(5)、接口是需要被實(shí)現(xiàn)的,必須重寫接口中的所有抽象方法
(6)、一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)
(7)、接口可以繼承接口
2、設(shè)計(jì)規(guī)則:
(1)、將派生類所有的屬性和行為,抽到超類中----------抽共性
(2)、所有派生類的行為都一樣,設(shè)計(jì)普通方法
所有派生類的行為不一樣,設(shè)計(jì)抽象方法
(3)、將部分派生類所有的行為,抽到接口中
1、多態(tài):
(1)、意義:
(1.1)、行為多態(tài):同一類型的引用指向不同的對(duì)象時(shí),有不同的實(shí)現(xiàn)
(1.2)、對(duì)象多態(tài):同一對(duì)象被造型為不同類型時(shí),有不同功能
(2)、向上造型:
(2.1)、超類型的引用指向派生類的對(duì)象
(2.2)、能造型 成為的數(shù)據(jù)類型有:超類+所有實(shí)現(xiàn)的接口
(2.3)、能點(diǎn)出什么,看引用的類型
(3)、強(qiáng)制類型轉(zhuǎn)換,成功的條件只有如下兩種:
(3.1)、引用所指向的對(duì)象,就是該類型
(3.2)、引用所指向的對(duì)象,實(shí)現(xiàn)了該接口
(4)、強(qiáng)轉(zhuǎn)若不符合如上條件,則發(fā)生ClassCastException類型轉(zhuǎn)換異常
建議:在強(qiáng)轉(zhuǎn)之前用instanceof來判斷
1、內(nèi)存管理:由JVM管理的
(1)、堆:
(1.1)、存儲(chǔ)new出來的對(duì)象(包括實(shí)例變量)
(1.2)、垃圾:沒有任何引用所指向的對(duì)象
垃圾回收(GC)不定時(shí)到內(nèi)存中清理垃圾
回收過程是透明的(看不到的)
不一定一發(fā)現(xiàn)垃圾就回收,通過調(diào)用System.gc()可以建議調(diào)度GC來回收
(1.3)、實(shí)例變量的生命周期:創(chuàng)建對(duì)象時(shí)存儲(chǔ)在堆中,對(duì)象被回收時(shí)一并被回收
(1.4)、內(nèi)存泄漏:不再使用的對(duì)象還沒有被即時(shí)回收
建議:對(duì)象不再使用時(shí),及時(shí)將對(duì)象設(shè)置為null
(2)、棧:
(2.1)、存儲(chǔ)正在調(diào)用方法中的局部變量(包括方法的參數(shù))
(2.2)、調(diào)用方法時(shí)會(huì)在棧中為該方法分配一塊對(duì)應(yīng)的棧幀,棧 幀中存儲(chǔ)方法中的局部變量(包括參數(shù))
方法結(jié)束時(shí),棧幀被清除,局部變量一并被清除
(2.3)、
(3)、方法區(qū):
(3.1)、存儲(chǔ).class字節(jié)碼文件
(3.2)、方法只有一份,用this.來區(qū)分具體調(diào)用對(duì)象
實(shí)例變量:
(1)、類中,方法外
(2)、創(chuàng)建對(duì)象時(shí)存儲(chǔ)在堆中,對(duì)象被回收時(shí)一并被回收
(3)、有默認(rèn)值
局部變量:
(1)、方法中
(2)、調(diào)用方法時(shí)存儲(chǔ)在棧中
(3)、沒有默認(rèn)值
面向?qū)ο笕筇攸c(diǎn):繼承、封裝、多態(tài)
1、封裝:
(1)、類:封裝的是對(duì)象的屬性和行為
(2)、方法:封裝特點(diǎn)的業(yè)務(wù)邏輯功能實(shí)現(xiàn)
(3)、訪問控制修飾符:封裝的是具體的訪問權(quán)限
2、繼承:
(1)、作用:代碼復(fù)用
(2)、超類:所有派生類所共有的屬性和行為
接口:部分派生類所有的共有的行為
派生類:派生類所特有的屬性和行為
(3)傳遞性:?jiǎn)我焕^承,多接口實(shí)現(xiàn)
3。多態(tài):
(1)意義:行為多態(tài):所有抽象方法都是多態(tài)的
對(duì)象的多態(tài):所有對(duì)象都是多態(tài)的
(2)、向上造型、強(qiáng)制類型轉(zhuǎn)換,instanceof判斷
(3)、多態(tài)的表現(xiàn)形式:
(3.1)、重寫:根據(jù)對(duì)象的不同來表現(xiàn)多態(tài)
(3.2)、重載:根據(jù)參數(shù)的不同來表現(xiàn)多態(tài)