# 大數(shù)據(jù)工程(二) ## Java面向?qū)ο?/h1>

### 面向?qū)ο缶幊?/p>

面向?qū)ο缶幊趟枷?/p>

隨著互聯(lián)網(wǎng)項(xiàng)目需求越來(lái)越復(fù)雜嫂沉,面向過(guò)程不能滿足国旷,使用面向?qū)ο蟆?/p>

將功能(方法/函數(shù))封裝進(jìn)對(duì)象、強(qiáng)調(diào)了具備了功能的對(duì)象蛔屹,以類/對(duì)象為最小單位矢沿,考慮誰(shuí)來(lái)做滥搭。

兩個(gè)要素:類和對(duì)象

面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì)

類的設(shè)計(jì)就是類的成員的設(shè)計(jì)

類和對(duì)象的使用(面向?qū)ο笏枷肼涞氐膶?shí)現(xiàn)):

1酸纲、創(chuàng)建類捣鲸,設(shè)計(jì)類的成員

2、創(chuàng)建類的對(duì)象

3闽坡、通過(guò)“對(duì)象栽惶,屬性”和“對(duì)象愁溜,方法”調(diào)用對(duì)象的結(jié)構(gòu)next

-類

? 類是一組相關(guān)屬性和行為的組合

? 類是對(duì)一類事物的描述,是抽象的外厂,概念上的定義冕象。

? 實(shí)際存在的該類事物的每個(gè)個(gè)體,因?yàn)橐卜Q為實(shí)例(instance)

? 面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì)

? 類的設(shè)計(jì)就是類的成員的設(shè)計(jì)汁蝶。

? Java代碼世界是由諸多個(gè)不同的功能的類構(gòu)成的渐扮。再大的項(xiàng)目都是由類實(shí)現(xiàn)的。

? 例外情況是接口掖棉,就不是類構(gòu)成的墓律。




? Java有豐富的類庫(kù)和第三方庫(kù)

-類和對(duì)象的創(chuàng)建

-類的結(jié)構(gòu)

? 事物描述類


? 創(chuàng)建Person類的屬性和方法:


? public class Person{

? String name;

? int age = 1幔亥;

? boolean isMale耻讽;


? public void eat(){

? System.out.println("eat")

? }


? public void talk(String language){

? System.out.println("talk"+language)

? }

? }

-成員一:屬性Field

? 屬性:對(duì)應(yīng)類中的成員變量

? field=屬性=成員變量=域、字段


? String name帕棉;

? int age = 1针肥;

? boolean isMale;

-=成員變量Member

? 類中香伴,方法外慰枕,儲(chǔ)存在堆內(nèi)存

? 不需要給初始化值

? 1.就是屬性,直接定義在類的一對(duì){}內(nèi)的屬性

? ....

? 都指非static



? 2.可以使用權(quán)限修飾符:(結(jié)構(gòu)被調(diào)用可見(jiàn)性的大新髦稀)捺僻,跟封裝性有關(guān)系

? private

? public

? static

? 缺省=不寫(xiě)的情況下

? protected


? 3.有默認(rèn)初始化值,根據(jù)其類型

? 整型(byte short int long=0)

? 浮點(diǎn)型(float double=0.0)

? 字符型(char=0或崇裁、=\u0000)

? 布爾型(false)

? 引用數(shù)據(jù)類型(類匕坯、數(shù)組、接口=null)

? string=null


? 4.屬性在內(nèi)存中加載到堆空間


? public class Student{

? string name;-聲明一個(gè)姓名string變量

? int age;聲明一個(gè)年齡int變量

? }


? 5.隨著對(duì)象的創(chuàng)建而存在拔稳,隨著對(duì)象的消失而消失

-private

? 可以修飾成員變量和成員方法

? 被private修飾的成員只能在本類中才能訪問(wèn)葛峻。

? 控制數(shù)據(jù)安全性。

? 在Demo創(chuàng)建對(duì)象的時(shí)候就無(wú)法調(diào)用巴比。


? 針對(duì)private修飾的成員變量术奖,我們會(huì)相應(yīng)的提供getXxx()和setXxx()方法,用于獲取和設(shè)置成員變量的值和方法轻绞。


? private int age


? public void setAge(int a){

if(a<0||a>200){

System.out.println("wrong age");

}else{

age=a;

? }

}

? public int getAge(){

return age;

? }


? 在Demo中就可以調(diào)用private的成員變量采记。

? public static void main..

s.setAge(00);

-成員二:方法/函數(shù)

? 描述類應(yīng)該具有的功能

? 行為=方法=功能:對(duì)應(yīng)類中的成員方法

? method=成員方法=函數(shù)


? 函數(shù)式一塊代碼塊,接收零個(gè)或多個(gè)參數(shù)政勃,做一個(gè)特殊的事情唧龄,并返回零個(gè)或一個(gè)值。


? 任何函數(shù)都必須是類的成員奸远,寫(xiě)在class里既棺。


? public void eat(){

? System.out.println("eat")

? }


? public void talk(String language){

? System.out.println("talk"+language)

? }


? 調(diào)用函數(shù)invoke a method

? int z= max(x,y)


? 方法是功能的封裝讽挟,通過(guò)對(duì)象來(lái)調(diào)用功能。

-定義方法/函數(shù)的結(jié)構(gòu)

? 類中方法的聲明和使用:


? 格式:

? 權(quán)限修飾符 返回值類型 方法名(形參列表)


? 刻畫(huà)類應(yīng)該具有的功能

? math類:sqrt()\random()丸冕。耽梅。

? scanner類:nextXxx。胖烛。

? Array類:sort()\binarySearch()\toString()\equals()


? 方法聲明:

? 1.public void eat(){}沒(méi)參沒(méi)返回

? 2.public void sleep(int hour){}有參沒(méi)返

? 3.public String getName(){} 沒(méi)參有返

return name調(diào)用屬性

? ? ? public void setAge(int i) { //聲明方法setAge

? ? ? age = i; //將參數(shù)i的值賦給類的成員變量age

? 4.public String getNation(String nation){}有參有返

return nation



? 方法的格式:


? 修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名1眼姐,參數(shù)類型 參數(shù)名2.。佩番。妥凳。){

? 方法體;

? return返回值

? }


? public static void main(){

for(int i=0; i<20; i++){

System.out.println("Hello World!")

? }

? }


? 方法中只能調(diào)用方法或?qū)傩源鸩叮豢梢栽诜椒▋?nèi)部定義方法逝钥。

-修飾符modifier

? 可以有,可以沒(méi)有

? 都是有意義的

? public誰(shuí)都可以訪問(wèn)

? static這個(gè)函數(shù)是靜態(tài)的拱镐,整個(gè)類的

? 沒(méi)有static說(shuō)明是屬于這個(gè)類的某一個(gè)對(duì)象艘款,而不是屬于整個(gè)類的

-訪問(wèn)權(quán)限修飾符Access Modifier(關(guān)鍵字)

? 封裝性

-四種權(quán)限關(guān)鍵字

-private

-屬性/方法

-封裝性

-缺省/default

? 什么也不寫(xiě)

-protected

-public

? public誰(shuí)都可以訪問(wèn)的類

? 在一個(gè)java源文件中可以聲明多個(gè)class。但是沃琅,只能最多有一個(gè)類聲明為public哗咆,并且和類源文件同名。

-其他關(guān)鍵字

-package關(guān)鍵字

-import

-static屬于整個(gè)類的

? static這個(gè)函數(shù)是靜態(tài)的益眉,整個(gè)類的

? 比如main方法(JDK直接調(diào)用的方法)

? 不能用this晌柬,不依附于對(duì)象。

? 沒(méi)有static說(shuō)明是屬于某個(gè)類的某一個(gè)對(duì)象郭脂,而不是屬于整個(gè)類的年碘。

? public static void main....


? 靜態(tài)方法不能訪問(wèn)非靜態(tài)成員方法和非靜態(tài)成員變量(因?yàn)椴灰蕾囉趯?duì)象),但在非靜態(tài)成員方法中可以不用對(duì)象訪問(wèn)靜態(tài)方法和變量展鸡。


? 帶有static的方法屿衅,可以通過(guò)類的名稱去直接調(diào)用。其他的需要?jiǎng)?chuàng)建對(duì)象莹弊。

? 所以方便在沒(méi)有創(chuàng)建對(duì)象的情況下來(lái)進(jìn)行調(diào)用(靜態(tài)方法/變量/)涤久。

? 不依賴對(duì)象進(jìn)行訪問(wèn),只要類被加載了忍弛,就可以通過(guò)類名去進(jìn)行訪問(wèn)响迂,

-this

? this:代表所在類的對(duì)象引用。當(dāng)前調(diào)用對(duì)象的引用细疚。用在屬性和參數(shù)同名時(shí)蔗彤。


? ? 它在方法內(nèi)部使用,即這個(gè)方法所屬對(duì)象的引用;

? ? 它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對(duì)象幕与。

? ? this 可以調(diào)用類的屬性、方法和構(gòu)造器


? ? 什么時(shí)候使用this關(guān)鍵字呢?

? ? 當(dāng)在方法內(nèi)需要用到調(diào)用該方法的對(duì)象時(shí)镇防,就用this啦鸣。

? 具體的:我們可以用this來(lái)區(qū)分屬性和局部變量。 比如:this.name = name;


? 成員變量=屬性

? 局部變量=參數(shù)

-super關(guān)鍵字

-final

-變量

-類

-方法

-abstract

-類

-方法

-返回值類型return value type

? 有返回值&沒(méi)有返回值

? 1.如果有返回值来氧,必須在方法聲明時(shí)指定返回值的類型诫给,同時(shí),方法中需要使用return關(guān)鍵字來(lái)返回指定類型的變量或常量啦扬。

? 2.沒(méi)有返回值中狂,則聲明方法是,使用void來(lái)表示扑毡。使用return表示結(jié)束方法胃榕。

? 3.定義方法該不該有返回值。根據(jù)要求瞄摊,憑經(jīng)驗(yàn)勋又。

-void空類型

? 沒(méi)有返回值return的方法


? 調(diào)用時(shí)直接調(diào)用,不用傳遞參數(shù)


? void修飾的方法的調(diào)用:


? public class MethodTest(){

public static void main(String[] args)


? }


public static void helloWorld(){

for (int i=1;i<10,i++){

System.out.println("HelloWorld")

}

? }


? 練習(xí)

-int换帜、float楔壤、double、string

? 有return值惯驼,調(diào)用時(shí)需傳遞參數(shù)

-方法名method name

? 屬于標(biāo)識(shí)符蹲嚣,遵循標(biāo)識(shí)符的規(guī)則和規(guī)范,符合見(jiàn)名知意祟牲。

-main入口函數(shù)

? 程序的入口是main方法隙畜,格式是固定的

-形參列表parameter list

? 相當(dāng)于數(shù)學(xué)里的自變量,可以沒(méi)有说贝,也可以有多個(gè)禾蚕,用逗號(hào)隔開(kāi),用括號(hào)括起來(lái)狂丝。


? 每個(gè)參數(shù)都要有參數(shù)類型和參數(shù)名换淆。

? 形參:方法聲明時(shí)的參數(shù)


? 方法可以聲明0個(gè)1個(gè)或多個(gè)形參。

? 格式:(數(shù)據(jù)類型1 形參1几颜,數(shù)據(jù)類型2 形參2倍试,。蛋哭。县习。)

-參數(shù)結(jié)構(gòu)

-參數(shù)類型

? String類型的數(shù)組參數(shù)列表

? String[]

-基本類型

-引用類型

-數(shù)組

-類

-接口

-參數(shù)名args

-參數(shù)類型

-無(wú)形參

-有形式參數(shù)formal parameter

-方法參數(shù)的使用

-方法的重載

? 即同名方法,參數(shù)不同

? 使用重載方法,可以為編程帶來(lái)方便躁愿。

? 在調(diào)用方法的時(shí)候叛本,Java虛擬機(jī)會(huì)通過(guò)傳入的參數(shù)列表的個(gè)數(shù)和類型的不同來(lái)區(qū)別。


? ? 重載的概念?

? 在同一個(gè)類中彤钟,允許存在一個(gè)以上的同名方法来候,只要它們的參數(shù)個(gè)數(shù)或者參數(shù) 類型不同即可。?

? 重載的特點(diǎn):?

? ? 與返回值類型無(wú)關(guān)逸雹,只看參數(shù)列表营搅,且參數(shù)列表必須不同。(參數(shù)個(gè)數(shù)或參數(shù)類 型)梆砸。調(diào)用時(shí)转质,根據(jù)方法參數(shù)列表的不同來(lái)區(qū)別。?

? 重載示例:?

? //返回兩個(gè)整數(shù)的和

? int add(int x,int y){return x+y;}?

? //返回三個(gè)整數(shù)的和

? int add(int x,int y,int z){return x+y+z;}?

? //返回兩個(gè)小數(shù)的和

? double add(double x,double y){return x+y;}?


? public class PrintStream {

? public static void print(int i) {......} public static void print(float f) {......} public static void print(String s) {......}?

? public static void main(String[] args) { print(3);?

? print(1.2f);?

? print("hello!");

-可變個(gè)數(shù)形參

? 定義可變長(zhǎng)度參數(shù)的方法


? 說(shuō)明:?

? 1.聲明格式:方法名(參數(shù)的類型名 ...參數(shù)名)

? public void test1(String ... books){?

? System.out.println("****形參長(zhǎng)度可變的test1方法****");?

? }

? 2.可變參數(shù):方法參數(shù)部分指定類型的參數(shù)個(gè)數(shù)是可變多個(gè):0個(gè)帖世,1個(gè)或多個(gè) 3. 可變個(gè)數(shù)形參的方法與同名的方法之間休蟹,彼此構(gòu)成重載

? 4.可變參數(shù)方法的使用與方法參數(shù)部分使用數(shù)組是一致的

? 5.方法的參數(shù)部分有可變形參,需要放在形參聲明的最后

? 6.在一個(gè)方法的形參位置日矫,最多只能聲明一個(gè)可變個(gè)數(shù)形參

-值傳遞機(jī)制

? Java里方法的參數(shù)傳遞方式只有一種:值傳遞鸡挠。 即將實(shí)際參數(shù)值的副本 (復(fù)制品)傳入方法內(nèi),而參數(shù)本身不受影響搬男。?


? 形參是基本數(shù)據(jù)類型:將實(shí)參基本數(shù)據(jù)類型變量的“數(shù)據(jù)值”傳遞給形參?

? 形參是引用數(shù)據(jù)類型:將實(shí)參引用數(shù)據(jù)類型變量的“地址值”傳遞給形參


? 引用類型:類(對(duì)象)(string類)拣展,數(shù)組

-方法體statements method header

? 代碼功能語(yǔ)句


? 包含局部變量


? 調(diào)用一個(gè)功能時(shí),主要是對(duì)方法體的體現(xiàn)缔逛。


? 之后大部分時(shí)間都是在寫(xiě)方法體备埃。


? 方法的使用:

? 1.在方法內(nèi)可以調(diào)用當(dāng)前類的屬性和方法。遞歸方法褐奴。

? 2.方法里不能定義另一個(gè)方法按脚。

-方法的使用

-成員方法

? 和定義方法一樣,但是去掉static


? public void study(){

Sys...

? }


? public void eat(){

Sys...

? }

-遞歸方法/函數(shù)

? resursion

? 方法的使用中敦冬,可以調(diào)用當(dāng)前類的屬性和方法辅搬。

? 特殊的,方法A中又調(diào)用了方法A--遞歸方法脖旱。


? 遞歸方法:一個(gè)方法體內(nèi)調(diào)用它自身堪遂。?

? 方法遞歸包含了一種隱式的循環(huán),它會(huì)重復(fù)執(zhí)行某段代碼萌庆,但這種重復(fù)執(zhí) 行無(wú)須循環(huán)控制溶褪。?

? 遞歸一定要向已知方向遞歸,否則這種遞歸就變成了無(wú)窮遞歸践险,類似于死 循環(huán)猿妈。


? 死循環(huán)會(huì)出現(xiàn)棧溢出:Stack Overflow


? public int getSum(int n){

if(n==1){

return 1;

}else{

return n + getSum(n-1);

? }

? }

-數(shù)組快排

-斐波那契數(shù)列

? 規(guī)律:一個(gè)數(shù)等于前兩個(gè)數(shù)之和

? 1 1 2 3 4? 5 8 13 21 34 55?


? f(n)=f(n-1)+f(n-2)

-漢諾塔問(wèn)題

-局部變量=本地變量

? 1.聲明在方法內(nèi)吹菱、方法形參、代碼塊內(nèi)彭则、構(gòu)造器形參鳍刷、構(gòu)造器內(nèi)部的變量,

? 儲(chǔ)存在棧內(nèi)存俯抖。

? 方法形參:

? public void talk(String language-形參)

? 方法內(nèi):

? public void eat(){

? String food = "pizza";

? System.out.println("I like eat "+food)

? }


? 2.不可以使用權(quán)限修飾符输瓜,只有final


? 3.沒(méi)有初始化值,在調(diào)用局部變量前一定要賦值初始化蚌成,形參在到用時(shí)賦值即可。


? 4.局部空間在內(nèi)存中加載在椓菽螅空間


? 5.隨著方法的調(diào)用而存在担忧,隨著方法的調(diào)用完畢而消失

-方法與數(shù)組

-遍歷數(shù)組

-獲取最值

-元素的和

-返回值return

? 表明結(jié)果是什么,以及結(jié)束程序坯癣。

? 一個(gè)函數(shù)里面可以有多個(gè)return瓶盛。


? 找到了,返回相對(duì)應(yīng)數(shù)據(jù)類型的值示罗,沒(méi)找到返回-1(Java默認(rèn))


? 使用:

? 1.使用范圍:方法體內(nèi)

? 2.作用:1)void結(jié)束方法

2)有返回值的惩猫,返回所數(shù)據(jù)。

? 3.注意點(diǎn):return關(guān)鍵字后面不可以聲明執(zhí)行類型蚜点。

-成員三:構(gòu)造器constructor

? 不是方法轧房,跟方法不一樣


? 構(gòu)造器作用:

? 沒(méi)有定義,系統(tǒng)會(huì)默認(rèn)提供一個(gè)空參構(gòu)造器

? 創(chuàng)建對(duì)象绍绘;給對(duì)象進(jìn)行初始化

? 一個(gè)類中可以定義多個(gè)構(gòu)造器(重載)

? 一旦顯示的定義了類的構(gòu)造器之后奶镶,系統(tǒng)就不再提供默認(rèn)的空參構(gòu)造器

? 一個(gè)類中,至少一個(gè)構(gòu)造器


? 定義構(gòu)造器的格式:

? 權(quán)限修飾符 類名(形參列表)

? 給對(duì)象的類型進(jìn)行初始化

? 和類同名的方法


? 沒(méi)有寫(xiě)構(gòu)造方法的時(shí)候陪拘,系統(tǒng)會(huì)默認(rèn)創(chuàng)建一個(gè)無(wú)參無(wú)返回值的構(gòu)造器厂镇。


? 定義構(gòu)造器格式:

? 1.權(quán)限修飾符

? 2.方法名和類名相同

? 3.沒(méi)有返回值的方法,連void都沒(méi)

? 4.(形參列表)p1.name

? Person p1 = new Person("Tom")


? public person(String n){

name=n;

? }

Sys左刽。捺信。。欠痴。

? *沒(méi)有的時(shí)候顯示默認(rèn)的迄靠,寫(xiě)了就會(huì)顯示寫(xiě)的。


? 調(diào)用:

? 通過(guò)new這個(gè)關(guān)鍵字調(diào)用

? 創(chuàng)建類對(duì)象:new+構(gòu)造器()

? person p1 = new person();


? 構(gòu)造器是創(chuàng)建對(duì)象


? 注 意:

? ?Java語(yǔ)言中喇辽,每個(gè)類都至少有一個(gè)構(gòu)造器?

? ?默認(rèn)構(gòu)造器的修飾符與所屬類的修飾符一致?

? ?一旦顯式定義了構(gòu)造器梨水,則系統(tǒng)不再提供默認(rèn)構(gòu)造器?

? ?一個(gè)類可以創(chuàng)建多個(gè)重載的構(gòu)造器?

? ?父類的構(gòu)造器不可被子類繼承

-成員四:代碼塊

-static

-非static

-final關(guān)鍵字

-成員五:內(nèi)部類

-抽象類與抽象方法

-接口interface

? ? 一方面,有時(shí)必須從幾個(gè)類中派生出一個(gè)子類茵臭,繼承它們所有的屬性和方?

? 法疫诽。但是,Java不支持多重繼承。有了接口奇徒,就可以得到多重繼承的效果雏亚。?

? ?另一方面,有時(shí)必須從幾個(gè)類中抽取出一些共同的行為特征摩钙,而它們之間又 沒(méi)有is-a的關(guān)系罢低,僅僅是具有相同的行為特征而已。例如:鼠標(biāo)胖笛、鍵盤(pán)网持、打 印機(jī)、掃描儀长踊、攝像頭功舀、充電器、MP3機(jī)身弊、手機(jī)辟汰、數(shù)碼相機(jī)、移動(dòng)硬盤(pán)等都 支持USB連接阱佛。?

? ?接口就是規(guī)范帖汞,定義的是一組規(guī)則,體現(xiàn)了現(xiàn)實(shí)世界中“如果你是/要...則 必須能...”的思想凑术。繼承是一個(gè)"是不是"的關(guān)系翩蘸,而接口實(shí)現(xiàn)則是 "能不能" 的關(guān)系。?

? ? 接口的本質(zhì)是契約淮逊,標(biāo)準(zhǔn)鹿鳖,規(guī)范,就像我們的法律一樣壮莹。制定好后大家都 要遵守翅帜。

-API

? API:application programming interface,應(yīng)用程序編程接口。是jave提供的基本編程接口


? 定義好了各種動(dòng)作的方法命满,直接調(diào)用接口即可涝滴。


? java API指的就是JDK中提供的各種功能的java類。



? 在下載的JDK里面含有的

? API文檔:java語(yǔ)言提供了大量的基礎(chǔ)類胶台,因此Oracle也為這些基礎(chǔ)類提供了相應(yīng)的API文檔歼疮,用于告訴開(kāi)發(fā)者如何使用這些類,以及這些類里包含的方法诈唬。


? 如何使用:

-常用類庫(kù)(外部類)

? 在JDK里面的java常用開(kāi)發(fā)工具包內(nèi)提供


? 不需要關(guān)心這些類如何實(shí)現(xiàn)

? 是需要學(xué)會(huì)使用即可

-Scanner()

-random()

-object()

-wrapper()

-常用類

-math類:sqrt()\random()...

-scanner類:nextXXX()...

-array類:sort()\binarySearch()\toString()\equals()...

-常用內(nèi)部類的使用

-JavaBean

? 所謂javaBean韩脏,是指符合如下標(biāo)準(zhǔn)的Java類:?

? ?類是公共的?

? ?有一個(gè)無(wú)參的公共的構(gòu)造器?

? ?有屬性,且有對(duì)應(yīng)的get铸磅、set方法

-抽象類

-內(nèi)部類

-匿名內(nèi)部類

-枚舉類

-object類

-包裝(Wrapper)類

-字符串string類

-Subtopic 1

-Subtopic 2

-Subtopic 3

-面向?qū)ο笕筇匦?/p>

-封裝

? 封裝性的體現(xiàn):

? 1.私有屬性

? 2.私有方法

? 3.單例模式赡矢。杭朱。

? 將類的屬性私有化private,同時(shí)提供公共的public方法來(lái)獲取getXxx和設(shè)置setXxx


? 對(duì)屬性的設(shè)置(setXxx)

? legs屬性聲明成private以后不可見(jiàn)吹散,不能調(diào)用弧械,調(diào)用使用接口setLegs方法來(lái)調(diào)用

? public int setLegs(int a)-有形參

? legs=a



? 對(duì)屬性的獲取(getXxx)

? public int getLegs()-沒(méi)有形參

-權(quán)限修飾符

? 封裝性的體現(xiàn),需要權(quán)限修飾符來(lái)配合空民。

? 1.Java規(guī)定的有4種權(quán)限:(從小到大排)

? private

? 2.四種權(quán)限可以用來(lái)修飾類及類的內(nèi)部結(jié)構(gòu):屬性刃唐,方法,構(gòu)造器界轩,內(nèi)部類

? 3.具體的画饥,4種權(quán)限都可以用來(lái)修飾類的內(nèi)部結(jié)構(gòu),修飾類的話浊猾,只能使用缺省抖甘,public

-getXxx/setXxx

? public class Person{

? private int age;

? public int getAge() { //聲明方法getAge()?

? return age; }?

? public void setAge(int i) { //聲明方法setAge

? age = i; //將參數(shù)i的值賦給類的成員變量age?

? }

-包裝(Wrapper)類

-繼承

? 為什么要有繼承??

? 多個(gè)類中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類中与殃, 那么多個(gè)類無(wú)需再定義這些屬性和行為单山,只要繼承那個(gè)類即可碍现。?


? 此處的多個(gè)類稱為子類(派生類)幅疼,單獨(dú)的這個(gè)類稱為父類(基類 或超類)≈缃樱可以理解為:“子類 is a 父類”?


? 類繼承語(yǔ)法規(guī)則:

? class Subclass extends SuperClass{ }


? public student extends person{

? }



? 作用:

? ? 繼承的出現(xiàn)減少了代碼冗余爽篷,提高了代碼的復(fù)用性。

? ? 繼承的出現(xiàn)慢睡,更有利于功能的擴(kuò)展逐工。

? ? 繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提漂辐。


? ? 子類繼承了父類泪喊,就繼承了父類的方法和屬性。

? ? 在子類中髓涯,可以使用父類中定義的方法和屬性袒啼,也可以創(chuàng)建新的數(shù)據(jù)和?

? 方法。

? ? 在Java 中纬纪,繼承的關(guān)鍵字用的是“extends”蚓再,即子類不是父類的子集,?

? 而是對(duì)父類的“擴(kuò)展”包各。?

? 關(guān)于繼承的規(guī)則:?

? ?子類不能直接訪問(wèn)父類中私有的(private)的成員變量和方法摘仅。

-父類/子類

? ? Java只支持單繼承和多層繼承,不允許多重繼承?

? ? 一個(gè)子類只能有一個(gè)父類?

? ? 一個(gè)父類可以派生出多個(gè)子類

? ? class SubDemo extends Demo{ } //ok

? ? class SubDemo extends Demo1,Demo2...//error

-object類

? 在java中问畅,java.lang.Object 類是所有java類的最高層父類娃属,是唯一一個(gè)沒(méi)有父類的類:

? 如果在類的聲明中未使用extends 關(guān)鍵字指明其父類六荒,則默認(rèn)父類為Object 類。

-子類對(duì)象實(shí)例化

? 子類繼承所以父類的屬性和方法

-單繼承/多層繼承

? 在java中膳犹,只允許單繼承恬吕,也就是說(shuō) 一個(gè)類最多只能顯示地繼承于一個(gè)父類。但是一個(gè)類卻可以被多個(gè)類繼承须床,也就是說(shuō)一個(gè)類可以擁有多個(gè)子類铐料。

-static關(guān)鍵字

-方法的重寫(xiě)override/overwrite

? 定義:在子類中可以根據(jù)需要對(duì)從父類中繼承來(lái)的方法進(jìn)行改造,也稱?

? 為方法的重置豺旬、覆蓋钠惩。在程序執(zhí)行時(shí),子類的方法將覆蓋父類的方法族阅。


? 修改的是方法體篓跛。


? ?要求:

? 1.子類重寫(xiě)的方法必須和父類被重寫(xiě)的方法具有相同的方法名稱、參數(shù)列表 2. 子類重寫(xiě)的方法的返回值類型不能大于父類被重寫(xiě)的方法的返回值類型?

? 3.子類重寫(xiě)的方法使用的訪問(wèn)權(quán)限不能小于父類被重寫(xiě)的方法的訪問(wèn)權(quán)限?

? ?子類不能重寫(xiě)父類中聲明為private權(quán)限的方法

? 4.子類方法拋出的異常不能大于父類被重寫(xiě)方法的異常?


? ? 注意:?

? 子類與父類中同名同參數(shù)的方法必須同時(shí)聲明為非static的(即為重寫(xiě))坦刀,或者同時(shí)聲明為 static的(不是重寫(xiě))愧沟。因?yàn)閟tatic方法是屬于類的,子類無(wú)法覆蓋父類的方法鲤遥。

-this關(guān)鍵字

-super關(guān)鍵字

? ?在Java類中使用super來(lái)調(diào)用父類中的指定操作:?

? ?super可用于訪問(wèn)父類中定義的屬性 ?super可用于調(diào)用父類中定義的成員方法 ?super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器?

? ?注意: ?尤其當(dāng)子父類出現(xiàn)同名成員時(shí)沐寺,可以用super表明調(diào)用的是父類中的成員?

? ?super的追溯不僅限于直接父類?

? ?super和this的用法相像,this代表本類對(duì)象的引用盖奈,super代表父類的內(nèi)存 空間的標(biāo)識(shí)

-調(diào)用屬性和方法

? 調(diào)用屬性:

? 子類重寫(xiě)屬性不會(huì)覆蓋父類的屬性混坞,用super.可以調(diào)用父類屬性,this訪問(wèn)本類中的屬性(super钢坦,this常省略)


? 調(diào)用方法:

? 子類重寫(xiě)方法會(huì)覆蓋父類的方法(帶有this.)究孕,一定要加super,沒(méi)重寫(xiě)的可以不加

-調(diào)用構(gòu)造器

? ?子類中所有的構(gòu)造器默認(rèn)都會(huì)訪問(wèn)父類中空參數(shù)的構(gòu)造器?

? ? 當(dāng)父類中沒(méi)有空參數(shù)的構(gòu)造器時(shí)爹凹,子類的構(gòu)造器必須通過(guò)this(參 數(shù)列表)或者super(參數(shù)列表)語(yǔ)句指定調(diào)用本類或者父類中相應(yīng)的 構(gòu)造器厨诸。同時(shí),只能”二選一”禾酱,且必須放在構(gòu)造器的首行?

? ?如果子類構(gòu)造器中既未顯式調(diào)用父類或本類的構(gòu)造器微酬,且父類中又 沒(méi)有無(wú)參的構(gòu)造器,則編譯出錯(cuò)

-多態(tài)

? 1.理解多態(tài)性:可以理解為一個(gè)事物的多態(tài)性宇植。

? 2.何為多態(tài)性

? 子類對(duì)象的多態(tài)性:父類的引用p2指向子類的對(duì)象Man

? person p2 = new Man()

? person p3 = new Woman

? 3.多態(tài)的使用:當(dāng)調(diào)用子父類同名同參數(shù)的方法時(shí)得封,實(shí)際執(zhí)行的是子類重寫(xiě)父類的方法-虛擬方法調(diào)用

? 注意:子類自己的方法是不能調(diào)用的,方法必須是父類有的指郁,子類重寫(xiě)的忙上,實(shí)際運(yùn)行的是子類重寫(xiě)父類的方法


? Java引用變量有兩個(gè)類型:編譯時(shí)類型和運(yùn)行時(shí)類型。編譯時(shí)類型由聲明 該變量時(shí)使用的類型決定闲坎,運(yùn)行時(shí)類型由實(shí)際賦給該變量的對(duì)象決定疫粥。簡(jiǎn) 稱:編譯時(shí)茬斧,看左邊;運(yùn)行時(shí),看右邊梗逮。


? ?若編譯時(shí)類型和運(yùn)行時(shí)類型不一致项秉,就出現(xiàn)了對(duì)象的多態(tài)性(Polymorphism) ?多態(tài)情況下,“看左邊”:看的是父類的引用(父類中不具備子類特有的方法)?

? “看右邊”:看的是子類的對(duì)象(實(shí)際運(yùn)行的是子類重寫(xiě)父類的方法)


? 4.多態(tài)性的使用前提:

? 類的繼承關(guān)系和方法的重寫(xiě)


? 多態(tài)性不適用于屬性(看左父類)

-虛擬方法調(diào)用

? 虛擬方法調(diào)用(Virtual Method Invocation)?

? ? 正常的方法調(diào)用

? Person e = new Person();?

? e.getInfo();

? Student e = new Student(); e.getInfo();?

? ? 虛擬方法調(diào)用(多態(tài)情況下) 子類中定義了與父類同名同參數(shù)的方法慷彤,在多態(tài)情況下娄蔼,將此時(shí)父類的方法稱為虛擬方法,父?

? 類根據(jù)賦給它的不同子類對(duì)象底哗,動(dòng)態(tài)調(diào)用屬于子類的該方法岁诉。這樣的方法調(diào)用在編譯期是無(wú)法 確定的。?

? Person e = new Student();?

? e.getInfo(); //調(diào)用Student類的getInfo()方法 ? 編譯時(shí)類型和運(yùn)行時(shí)類型?

? 編譯時(shí)e為Person類型跋选,而方法的調(diào)用是在運(yùn)行時(shí)確定的涕癣,所以調(diào)用的是Student類 的getInfo()方法∏氨辏——?jiǎng)討B(tài)綁定

-向下轉(zhuǎn)型(向上轉(zhuǎn)型=多態(tài))

? 有了對(duì)象的多態(tài)以后坠韩,內(nèi)存中實(shí)際上是加載了子類特有的屬性和方法,但是由于變量聲明為父類類型炼列,導(dǎo)致編譯時(shí)只搁,只能調(diào)用父類中聲明的屬性和方法,子類特有的屬性和方法不能調(diào)用唯鸭。


? 如何才能調(diào)用子類特有的屬性和方法须蜗?

? 使用強(qiáng)制類型轉(zhuǎn)換符(自動(dòng)類型提升)

? 較高級(jí)的基本數(shù)據(jù)類型-》較低級(jí)的基本數(shù)據(jù)類型


? Man m1 = (Man)p2;

? m1.earnMoney();

? ...


? 向上轉(zhuǎn)型:多態(tài)

? 向下轉(zhuǎn)型:使用instanceof進(jìn)行判斷

-instanceof操作符(關(guān)鍵字)

? a instanceof A:

? 判斷對(duì)象a是否是類A的實(shí)例硅确。如果是返回true目溉,如果不是返回false。


? 即為了在向下強(qiáng)轉(zhuǎn)之前不出現(xiàn)異常菱农,先做一個(gè)判斷缭付。


? if(p2 instanceof Woman)

? if(p2 instanceof Man)


? 如果a instanceof A返回true,則a instanceof B也返回true循未。其中陷猫,類B是類A的父類。

-單例設(shè)計(jì)模式

-抽象

-抽象類

-抽象方法

-接口

-容器

-設(shè)計(jì)模式

-Java新特性

-泛型

-元注解

-裝箱/拆箱

-枚舉

-可變參數(shù)

-Lambda表達(dá)式

-Stream API

-Data/Time API

### 應(yīng)用程序開(kāi)發(fā)(類庫(kù))

-異常處理

-斷點(diǎn)調(diào)試debug

? 可以通關(guān)斷點(diǎn)調(diào)試插卡程序的執(zhí)行流程

-JDBC

-Oracle/MySQL

-反射

? 通過(guò)對(duì)象倒推類

-網(wǎng)絡(luò)編程Java Web

-多線程編程

-Java常用類庫(kù)

-枚舉類/注解

-Java集合Map

-泛型

-I/O輸入/輸出流編程N(yùn)IO

-網(wǎng)絡(luò)

-集合

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末的妖,一起剝皮案震驚了整個(gè)濱河市绣檬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫂粟,老刑警劉巖娇未,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異星虹,居然都是意外死亡零抬,警方通過(guò)查閱死者的電腦和手機(jī)镊讼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)平夜,“玉大人蝶棋,你說(shuō)我怎么就攤上這事『龆剩” “怎么了玩裙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)段直。 經(jīng)常有香客問(wèn)我献酗,道長(zhǎng),這世上最難降的妖魔是什么坷牛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任罕偎,我火速辦了婚禮,結(jié)果婚禮上京闰,老公的妹妹穿的比我還像新娘颜及。我一直安慰自己,他們只是感情好蹂楣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布俏站。 她就那樣靜靜地躺著,像睡著了一般痊土。 火紅的嫁衣襯著肌膚如雪嚎货。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天饥伊,我揣著相機(jī)與錄音紊浩,去河邊找鬼。 笑死酌呆,一個(gè)胖子當(dāng)著我的面吹牛衡载,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隙袁,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼痰娱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了菩收?” 一聲冷哼從身側(cè)響起梨睁,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娜饵,沒(méi)想到半個(gè)月后坡贺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年拴念,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钧萍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡政鼠,死狀恐怖风瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情公般,我是刑警寧澤万搔,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站官帘,受9級(jí)特大地震影響瞬雹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刽虹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一酗捌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涌哲,春花似錦胖缤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至初烘,卻和暖如春涡真,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肾筐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工哆料, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人局齿。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓剧劝,卻偏偏與公主長(zhǎng)得像橄登,于是被迫代替她去往敵國(guó)和親抓歼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容