本章內(nèi)容
節(jié) 知識(shí)點(diǎn) 掌握程度 難易程度
面向?qū)ο缶幊趟枷? 面向?qū)ο缶幊趟枷? 理解
類(lèi)的定義 什么是類(lèi) 掌握
類(lèi)的格式 掌握
類(lèi)的成員 掌握
對(duì)象的創(chuàng)建和使用 什么是對(duì)象 理解
創(chuàng)建對(duì)象 掌握
構(gòu)造器 掌握 難
使用對(duì)象 掌握
匿名對(duì)象 理解 難
變量的作用域 掌握
this關(guān)鍵字 this關(guān)鍵字 掌握
垃圾回收機(jī)制 垃圾回收機(jī)制原理 掌握 難
面向?qū)ο缶幊趟枷?/h2>
面向過(guò)程編程
傳統(tǒng)的C語(yǔ)言屬于面向過(guò)程編程苍日。面向過(guò)程解決問(wèn)題的思路:通常是分析出解
決問(wèn)題所需要的步驟惭聂,然后用方法把這些步驟一步一步實(shí)現(xiàn),最后一個(gè)一個(gè)依
次調(diào)用方法來(lái)解決相恃。
案例:ATM提款機(jī)終端系統(tǒng)(面向過(guò)程編程)
傳統(tǒng)的C語(yǔ)言屬于面向過(guò)程編程苍日。面向過(guò)程解決問(wèn)題的思路:通常是分析出解
決問(wèn)題所需要的步驟惭聂,然后用方法把這些步驟一步一步實(shí)現(xiàn),最后一個(gè)一個(gè)依
次調(diào)用方法來(lái)解決相恃。
案例:ATM提款機(jī)終端系統(tǒng)(面向過(guò)程編程)
步驟1:輸入密碼辜纲,系統(tǒng)判斷是否正確,如正確拦耐,進(jìn)入取款界面耕腾,如錯(cuò)誤,提示重新輸入杀糯。
步驟2:進(jìn)入取款界面扫俺,輸入取款金額,系統(tǒng)判斷余額是否足夠固翰,如不足狼纬,提示;如足夠骂际,點(diǎn)鈔疗琉。
步驟3:吐出鈔票,打印票據(jù)歉铝。
面向過(guò)程編程考慮的問(wèn)題是程序運(yùn)行的流程盈简,主要是程序的算法,而數(shù)據(jù)只是在必要的時(shí)候插入到算法中間。
面向?qū)ο缶幊蹋∣OP:Object-Oriented Programming )
從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng)柠贤,并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方式香浩,強(qiáng)調(diào)直接以問(wèn)題域中的事物為中心來(lái)思考問(wèn)題,認(rèn)識(shí)問(wèn)題种吸,并根據(jù)這些事物的本質(zhì)特點(diǎn)弃衍,把它們抽象地表示為系統(tǒng)中的對(duì)象,作為系統(tǒng)的基本構(gòu)成單位坚俗。面向?qū)ο蠼鉀Q問(wèn)題的思路:通常是把構(gòu)成問(wèn)題域的事務(wù)分解成各個(gè)對(duì)象镜盯,給對(duì)象賦予相應(yīng)的屬性和行為,通過(guò)多個(gè)對(duì)象的相互協(xié)調(diào)來(lái)解決問(wèn)題猖败。建立對(duì)象的目的不是為了完成一個(gè)步驟速缆,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為 。支持面向?qū)ο缶幊淌荍ava 語(yǔ)言的重要特點(diǎn)恩闻。
案例:ATM提款機(jī)終端系統(tǒng)(面向?qū)ο缶幊?
根據(jù)要解決的問(wèn)題艺糜,可以抽象出如下對(duì)象:
客戶(hù)
銀行卡
現(xiàn)金
票據(jù)
這些對(duì)象沒(méi)有先后順序,共同作用才構(gòu)成了整個(gè)系統(tǒng)幢尚。我們只要用代碼設(shè)計(jì)出
這幾個(gè)類(lèi)型的對(duì)象破停,然后讓他們互相通信、傳遞消息就可以完成系統(tǒng)功能尉剩。
面向?qū)ο缶幊趟枷雽?shí)際上就是一種運(yùn)用對(duì)象真慢、類(lèi)、繼承理茎、封裝黑界、聚合、關(guān)聯(lián)皂林、
消息朗鸠、多態(tài)性等概念來(lái)構(gòu)造系統(tǒng)的軟件開(kāi)發(fā)方法。
面向過(guò)程
系統(tǒng)以過(guò)程/方法為中心來(lái)組織
過(guò)程間相互發(fā)送數(shù)據(jù)
過(guò)程的執(zhí)行動(dòng)作與數(shù)據(jù)被明顯的分離
關(guān)注的焦點(diǎn)在于數(shù)據(jù)結(jié)構(gòu)础倍、算法和執(zhí)行步驟
過(guò)程通常難以被復(fù)用烛占。
面向?qū)ο?/h3>
系統(tǒng)以對(duì)象為中心來(lái)組織
對(duì)象相互間發(fā)送消息
相關(guān)的屬性和行為被統(tǒng)一到對(duì)象上
關(guān)注的焦點(diǎn)是對(duì)象及對(duì)象的職責(zé)
使得系統(tǒng)構(gòu)建更容易,易維護(hù)沟启,易擴(kuò)展扰楼,易復(fù)用
解決問(wèn)題的方式更接近人的思維方式,使人更容易理解
從面向過(guò)程到面向?qū)ο竺榔郑粌H僅是編程方式的改變,更重要的是思考方式的改變项栏。
面向?qū)ο蠡靖拍?/h3>
抽象(abstract):
從事物中舍棄個(gè)別的非本質(zhì)特征浦辨,抽取共同的本質(zhì)特征
只考慮與問(wèn)題域相關(guān)的信息,而忽略與問(wèn)題域不相關(guān)的部分
對(duì)象(object):是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體。
可以是有形的流酬,也可以是無(wú)形的(如一個(gè)客戶(hù)币厕,一張銀行卡,窗體中的一個(gè)按鈕等等)
對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位
具有自己的靜態(tài)結(jié)構(gòu)(屬性)和動(dòng)態(tài)行為(方法)
每個(gè)對(duì)象有自己的唯一標(biāo)識(shí)
類(lèi)(class):
類(lèi)是一組具有相同屬性和行為的對(duì)象的抽象芽腾,
類(lèi)的作用是用來(lái)創(chuàng)建對(duì)象旦装,對(duì)象是類(lèi)的一個(gè)實(shí)例
類(lèi)和對(duì)象的關(guān)系
抽象和具體的關(guān)系。
每一個(gè)類(lèi)在某一時(shí)刻都有零個(gè)或更多的實(shí)例摊滔, 類(lèi)是生成對(duì)象的模板
一個(gè)類(lèi)定義了使用哪些數(shù)據(jù)來(lái)描述屬性阴绢,每一個(gè)對(duì)象都有相應(yīng)的屬性值數(shù)據(jù),
一個(gè)類(lèi)通過(guò)一系列方法來(lái)定義行為艰躺,這些方法能在每個(gè)對(duì)象中被激活
面向?qū)ο笾饕卣?/h3>
封裝(encapsulation):
所謂封裝是把對(duì)象的屬性和行為結(jié)合在一個(gè)獨(dú)立的系統(tǒng)單位內(nèi)部
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)呻袭,只向外部提供接口
降低對(duì)象間的耦合度
封裝的重要意義:
使對(duì)象能夠集中而完整地描述并對(duì)應(yīng)一個(gè)具體事物
體現(xiàn)了事物的相對(duì)獨(dú)立性,使對(duì)象外部不能隨意存取對(duì)象的內(nèi)部數(shù)據(jù)
繼承(inheritance):
也稱(chēng)泛化腺兴,繼承性是子類(lèi)自動(dòng)共享父類(lèi)屬性和方法的機(jī)制左电,在定義和實(shí)現(xiàn)一個(gè)
類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行页响,把這個(gè)已經(jīng)存在的類(lèi)
所定義的內(nèi)容作為自己的內(nèi)容篓足,并加入自己若干新的內(nèi)容
繼承簡(jiǎn)化了人們對(duì)事物的認(rèn)識(shí)和描述,有益于軟件復(fù)用闰蚕,是OO技術(shù)提高軟件開(kāi)發(fā)效率的重要原因之一
是類(lèi)之間的一種關(guān)系栈拖,一般類(lèi)與特殊類(lèi)之間的關(guān)系
繼承關(guān)系的語(yǔ)義:“is a kind of”
多態(tài)(polymorphism):
指同一個(gè)命名可具有不同的語(yǔ)義
OO方法中,常指在一般類(lèi)中定義的屬性或方法被特殊類(lèi)繼承之后陪腌,可以具有
不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為辱魁,對(duì)于子類(lèi),可用不同的方法替代實(shí)現(xiàn)父
類(lèi)的服務(wù)的方法
類(lèi)的定義
什么是類(lèi)
把相似的對(duì)象劃歸成一個(gè)類(lèi)诗鸭。
在軟件設(shè)計(jì)中染簇,類(lèi),就是一個(gè)模板强岸,它定義了通用于一個(gè)特定種類(lèi)的所有對(duì)象
的屬性(變量)和行為(方法)锻弓。
什么是類(lèi)? 示例 XiyoujiRole.java
西游記游戲軟件中的游戲人物
孫悟空:孫悟空的武器是金箍棒蝌箍,戰(zhàn)斗力五顆星青灼,耐力五顆星
唐 僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零妓盲,耐力五顆星
豬八戒:豬八戒的武器是耙子杂拨,戰(zhàn)斗力四顆星,耐力兩顆星
沙 僧:沙僧的武器是月牙鏟 悯衬,戰(zhàn)斗力三顆星弹沽,耐力四顆星
類(lèi)的格式
[類(lèi)修飾符] class 類(lèi)名
{
類(lèi)的成員
…
}
修飾符一般為public,也可以沒(méi)有修飾符。
注意類(lèi)名的命名規(guī)范策橘。類(lèi)名一般大寫(xiě)
類(lèi)的成員:
成員變量(屬性)
成員方法(方法)
嵌套類(lèi)
通過(guò)“.”調(diào)用屬性和方法
類(lèi)的格式
系統(tǒng)以對(duì)象為中心來(lái)組織
對(duì)象相互間發(fā)送消息
相關(guān)的屬性和行為被統(tǒng)一到對(duì)象上
關(guān)注的焦點(diǎn)是對(duì)象及對(duì)象的職責(zé)
使得系統(tǒng)構(gòu)建更容易,易維護(hù)沟启,易擴(kuò)展扰楼,易復(fù)用
解決問(wèn)題的方式更接近人的思維方式,使人更容易理解
抽象(abstract):
從事物中舍棄個(gè)別的非本質(zhì)特征浦辨,抽取共同的本質(zhì)特征
只考慮與問(wèn)題域相關(guān)的信息,而忽略與問(wèn)題域不相關(guān)的部分
對(duì)象(object):是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體。
可以是有形的流酬,也可以是無(wú)形的(如一個(gè)客戶(hù)币厕,一張銀行卡,窗體中的一個(gè)按鈕等等)
對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位
具有自己的靜態(tài)結(jié)構(gòu)(屬性)和動(dòng)態(tài)行為(方法)
每個(gè)對(duì)象有自己的唯一標(biāo)識(shí)
類(lèi)(class):
類(lèi)是一組具有相同屬性和行為的對(duì)象的抽象芽腾,
類(lèi)的作用是用來(lái)創(chuàng)建對(duì)象旦装,對(duì)象是類(lèi)的一個(gè)實(shí)例
類(lèi)和對(duì)象的關(guān)系
抽象和具體的關(guān)系。
每一個(gè)類(lèi)在某一時(shí)刻都有零個(gè)或更多的實(shí)例摊滔, 類(lèi)是生成對(duì)象的模板
一個(gè)類(lèi)定義了使用哪些數(shù)據(jù)來(lái)描述屬性阴绢,每一個(gè)對(duì)象都有相應(yīng)的屬性值數(shù)據(jù),
一個(gè)類(lèi)通過(guò)一系列方法來(lái)定義行為艰躺,這些方法能在每個(gè)對(duì)象中被激活
面向?qū)ο笾饕卣?/h3>
封裝(encapsulation):
所謂封裝是把對(duì)象的屬性和行為結(jié)合在一個(gè)獨(dú)立的系統(tǒng)單位內(nèi)部
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)呻袭,只向外部提供接口
降低對(duì)象間的耦合度
封裝的重要意義:
使對(duì)象能夠集中而完整地描述并對(duì)應(yīng)一個(gè)具體事物
體現(xiàn)了事物的相對(duì)獨(dú)立性,使對(duì)象外部不能隨意存取對(duì)象的內(nèi)部數(shù)據(jù)
繼承(inheritance):
也稱(chēng)泛化腺兴,繼承性是子類(lèi)自動(dòng)共享父類(lèi)屬性和方法的機(jī)制左电,在定義和實(shí)現(xiàn)一個(gè)
類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行页响,把這個(gè)已經(jīng)存在的類(lèi)
所定義的內(nèi)容作為自己的內(nèi)容篓足,并加入自己若干新的內(nèi)容
繼承簡(jiǎn)化了人們對(duì)事物的認(rèn)識(shí)和描述,有益于軟件復(fù)用闰蚕,是OO技術(shù)提高軟件開(kāi)發(fā)效率的重要原因之一
是類(lèi)之間的一種關(guān)系栈拖,一般類(lèi)與特殊類(lèi)之間的關(guān)系
繼承關(guān)系的語(yǔ)義:“is a kind of”
多態(tài)(polymorphism):
指同一個(gè)命名可具有不同的語(yǔ)義
OO方法中,常指在一般類(lèi)中定義的屬性或方法被特殊類(lèi)繼承之后陪腌,可以具有
不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為辱魁,對(duì)于子類(lèi),可用不同的方法替代實(shí)現(xiàn)父
類(lèi)的服務(wù)的方法
類(lèi)的定義
什么是類(lèi)
把相似的對(duì)象劃歸成一個(gè)類(lèi)诗鸭。
在軟件設(shè)計(jì)中染簇,類(lèi),就是一個(gè)模板强岸,它定義了通用于一個(gè)特定種類(lèi)的所有對(duì)象
的屬性(變量)和行為(方法)锻弓。
什么是類(lèi)? 示例 XiyoujiRole.java
西游記游戲軟件中的游戲人物
孫悟空:孫悟空的武器是金箍棒蝌箍,戰(zhàn)斗力五顆星青灼,耐力五顆星
唐 僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零妓盲,耐力五顆星
豬八戒:豬八戒的武器是耙子杂拨,戰(zhàn)斗力四顆星,耐力兩顆星
沙 僧:沙僧的武器是月牙鏟 悯衬,戰(zhàn)斗力三顆星弹沽,耐力四顆星
類(lèi)的格式
[類(lèi)修飾符] class 類(lèi)名
{
類(lèi)的成員
…
}
修飾符一般為public,也可以沒(méi)有修飾符。
注意類(lèi)名的命名規(guī)范策橘。類(lèi)名一般大寫(xiě)
類(lèi)的成員:
成員變量(屬性)
成員方法(方法)
嵌套類(lèi)
通過(guò)“.”調(diào)用屬性和方法
類(lèi)的格式
所謂封裝是把對(duì)象的屬性和行為結(jié)合在一個(gè)獨(dú)立的系統(tǒng)單位內(nèi)部
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)呻袭,只向外部提供接口
降低對(duì)象間的耦合度
封裝的重要意義:
使對(duì)象能夠集中而完整地描述并對(duì)應(yīng)一個(gè)具體事物
體現(xiàn)了事物的相對(duì)獨(dú)立性,使對(duì)象外部不能隨意存取對(duì)象的內(nèi)部數(shù)據(jù)
也稱(chēng)泛化腺兴,繼承性是子類(lèi)自動(dòng)共享父類(lèi)屬性和方法的機(jī)制左电,在定義和實(shí)現(xiàn)一個(gè)
類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行页响,把這個(gè)已經(jīng)存在的類(lèi)
所定義的內(nèi)容作為自己的內(nèi)容篓足,并加入自己若干新的內(nèi)容
繼承簡(jiǎn)化了人們對(duì)事物的認(rèn)識(shí)和描述,有益于軟件復(fù)用闰蚕,是OO技術(shù)提高軟件開(kāi)發(fā)效率的重要原因之一
是類(lèi)之間的一種關(guān)系栈拖,一般類(lèi)與特殊類(lèi)之間的關(guān)系
繼承關(guān)系的語(yǔ)義:“is a kind of”
指同一個(gè)命名可具有不同的語(yǔ)義
OO方法中,常指在一般類(lèi)中定義的屬性或方法被特殊類(lèi)繼承之后陪腌,可以具有
不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為辱魁,對(duì)于子類(lèi),可用不同的方法替代實(shí)現(xiàn)父
類(lèi)的服務(wù)的方法
把相似的對(duì)象劃歸成一個(gè)類(lèi)诗鸭。
在軟件設(shè)計(jì)中染簇,類(lèi),就是一個(gè)模板强岸,它定義了通用于一個(gè)特定種類(lèi)的所有對(duì)象
的屬性(變量)和行為(方法)锻弓。
西游記游戲軟件中的游戲人物
孫悟空:孫悟空的武器是金箍棒蝌箍,戰(zhàn)斗力五顆星青灼,耐力五顆星
唐 僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零妓盲,耐力五顆星
豬八戒:豬八戒的武器是耙子杂拨,戰(zhàn)斗力四顆星,耐力兩顆星
沙 僧:沙僧的武器是月牙鏟 悯衬,戰(zhàn)斗力三顆星弹沽,耐力四顆星
[類(lèi)修飾符] class 類(lèi)名
{
類(lèi)的成員
…
}
修飾符一般為public,也可以沒(méi)有修飾符。
注意類(lèi)名的命名規(guī)范策橘。類(lèi)名一般大寫(xiě)
類(lèi)的成員:
成員變量(屬性)
成員方法(方法)
嵌套類(lèi)
通過(guò)“.”調(diào)用屬性和方法
示例
Employee.java
class Employee {
String name;//屬性
int age;//屬性
double salary;//屬性
public String showName(){
System.out.println(name);
return name;
}
public int showAge(){
System.out.println(age);
return age;
}
public void updateName(String name2){
name = name2;
}
public void getSalary(){
System.out.println("The salary of this month is 2000");
}
}
/**
*showName showAge
*updateName getSalary 方法
*/
類(lèi)的成員
成員變量:
[修飾符] 類(lèi)型 屬性名=[默認(rèn)值];
其中修飾符有:public炸渡、private、protected,也可以省略不寫(xiě)丽已。
例如:
private int id;
private int age=20;
方法:
[修飾符] 返回值類(lèi)型 方法名(形參列表){ 語(yǔ)句
}
對(duì)象的創(chuàng)建和使用
什么是對(duì)象
類(lèi)(class) — 是對(duì)某一類(lèi)事物的描述
對(duì)象(object) — 是實(shí)際存在的某類(lèi)事物的個(gè)體蚌堵,
也稱(chēng)為實(shí)例(instance)
類(lèi)是創(chuàng)建對(duì)象的模板,對(duì)象是類(lèi)的實(shí)例沛婴。
創(chuàng)建對(duì)象
語(yǔ)法格式
類(lèi)名 對(duì)象名 = new 構(gòu)造器
示例
Employee zhang = new Employee( )
示例 TestEmployee.java
構(gòu)造器(構(gòu)造方法/構(gòu)造器吼畏,Constructor)
具有與類(lèi)相同的名稱(chēng)
不含返回值類(lèi)型
不能在方法中用return語(yǔ)句返回一個(gè)值
一般訪問(wèn)權(quán)限為public
在一個(gè)類(lèi)中,具有上述特征的方法就是構(gòu)造器瘸味。
構(gòu)造器的作用
完成對(duì)象的創(chuàng)建宫仗,即完成對(duì)象的實(shí)例化
一般使用構(gòu)造器來(lái)完成對(duì)成員變量的初始化
示例 Employee.java
01 public class Person{
02 String name;
03 int age;
04 String sex;
05
06 public Person( String n,int a, String s) {
07 name=n;
08 age=a;
09 sex=s;
10 }
11
12 public void sayHello(){
13 System.out.println("Hello, my name is "+name);
14 }
}
通過(guò)實(shí)例Person ,可以看到使用帶參數(shù)的構(gòu)造器進(jìn)行實(shí)例化簡(jiǎn)化了代碼旁仿,在創(chuàng)建對(duì)象的同時(shí)給對(duì)象的屬性賦值藕夫。此時(shí),類(lèi)由一個(gè)抽象的藍(lán)圖變化為一個(gè)具體的對(duì)象枯冈,同時(shí)對(duì)象的屬性已經(jīng)賦值毅贮。通過(guò)多次調(diào)用構(gòu)造器,一個(gè)類(lèi)可以實(shí)例化出多個(gè)對(duì)象尘奏。
構(gòu)造器也是方法滩褥,但是它是特殊的方法而已。它也可以像普通方法一樣發(fā)生重載炫加。通常一個(gè)類(lèi)中不止一個(gè)構(gòu)造方法瑰煎,而是有多個(gè)不同參數(shù)的構(gòu)造器,用戶(hù)可以根據(jù)需要選擇不同的構(gòu)造器創(chuàng)建對(duì)象俗孝。
注意在開(kāi)發(fā)中酒甸,我們?cè)诰帉?xiě)自己的類(lèi)時(shí),應(yīng)該根據(jù)需要提供相應(yīng)的構(gòu)造器赋铝,保證在使用這個(gè)類(lèi)時(shí)插勤,能夠選擇到合適的構(gòu)造方法。
所有的對(duì)象都是通過(guò)構(gòu)造器來(lái)創(chuàng)建的革骨,也可以說(shuō)任何對(duì)象都是通過(guò)內(nèi)存分配操作符new 創(chuàng)建和開(kāi)辟內(nèi)存空間的农尖。如果在開(kāi)發(fā)時(shí),沒(méi)有明確的寫(xiě)出構(gòu)造方法良哲,在編譯時(shí)編譯器會(huì)發(fā)現(xiàn)該類(lèi)沒(méi)有構(gòu)造器盛卡,這時(shí)編譯器會(huì)自動(dòng)的給這個(gè)類(lèi)增加一個(gè)構(gòu)造器,該構(gòu)造器沒(méi)有任何參數(shù)筑凫,我們稱(chēng)之為“默認(rèn)的空構(gòu)造器”窟扑。相反喇颁,如果我們?cè)诰帉?xiě)時(shí),手寫(xiě)了一個(gè)或是若干個(gè)帶參的構(gòu)造器嚎货,那么,這個(gè)不帶參的空構(gòu)造器就不會(huì)再自動(dòng)產(chǎn)生并存在蔫浆。在這樣的情況下殖属,如果在某些情況下還想使用這樣的無(wú)參數(shù)默認(rèn)構(gòu)造器的話,最好還是養(yǎng)成手寫(xiě)出這個(gè)無(wú)參數(shù)的構(gòu)造器來(lái)瓦盛,以備后用洗显。否則在這個(gè)類(lèi)中,將不再存在這個(gè)默認(rèn)的構(gòu)造器原环。
默認(rèn)的構(gòu)造器
在Java中挠唆,每個(gè)類(lèi)都至少要有一個(gè)構(gòu)造器,如果程序員沒(méi)有在類(lèi)里定義構(gòu)造器嘱吗,系統(tǒng)會(huì)自動(dòng)為這個(gè)類(lèi)產(chǎn)生一個(gè)默認(rèn)的訪問(wèn)權(quán)限為public且參數(shù)列表為空的構(gòu)造器
class Employee{
……
}
class Employee{
……
public Employee( )
{
}
……
}
一旦編程者為該類(lèi)定義了構(gòu)造器玄组,系統(tǒng)就不再提供默認(rèn)的構(gòu)造器
? 練習(xí)
下列關(guān)于類(lèi)的定義的選項(xiàng)中,哪些可以通過(guò)new Thing()方法來(lái)創(chuàng)建該類(lèi)的一個(gè)對(duì)象____?
A. public class Thing {}
B. public class Thing {public Thing() {}}
C. public class Thing {public Thing(void) {}}
D. public class Thing {public Thing(String s) {}}
E. public class Thing {public void Thing() {} public Thing(String s) {}}
答案:A谒麦、B
對(duì)象創(chuàng)建的內(nèi)存模型
在java中所有的變量俄讹、數(shù)組、對(duì)象都是分配在內(nèi)存中的绕德,根據(jù)變量類(lèi)型的不同分配的內(nèi)存也有所不同患膛。Java中主要有3種類(lèi)型的變量:
局部變量:定義在方法體中的變量;或是方法的形參耻蛇。
實(shí)例變量:即類(lèi)的屬性踪蹬,也是全局變量。
靜態(tài)變量:在類(lèi)中聲明為static 的屬性臣咖。
內(nèi)存的類(lèi)別
棧stack:棧的存取速度比堆快跃捣,效率高。在棧內(nèi)保存基本數(shù)據(jù)類(lèi)型的局部變
量和對(duì)象的引用值亡哄。
堆heap:堆可以保存那些對(duì)空間要求較大的變量枝缔。如對(duì)象的屬性和數(shù)組的元
素。在堆內(nèi)存中開(kāi)辟空間蚊惯,只能通過(guò)內(nèi)存分配操作符號(hào)new愿卸,凡是出現(xiàn)關(guān)鍵字
new的地方必定分配了一個(gè)堆內(nèi)存。
我們?cè)趯?shí)例化一個(gè)對(duì)象時(shí)截型,同時(shí)操作了棧內(nèi)存和堆內(nèi)存趴荸。在棧內(nèi)保存對(duì)象的首
地址,即 引用宦焦;在堆內(nèi)存中保存了對(duì)象的屬性发钝。對(duì)對(duì)象的所有操作只能通過(guò)
引用完成顿涣,一旦引用出棧釋放沒(méi)有任何引用指向該對(duì)象,對(duì)象就變成垃圾失
效酝豪。
堆和棧分別存儲(chǔ)哪些變量涛碑?
除了8種基本數(shù)據(jù)類(lèi)型的變量,其他變量都是引用類(lèi)型變量
類(lèi)(class)
Person p ;
接口(interface)
Animal a ;
數(shù)組
int[ ] c ;
對(duì)象創(chuàng)建的內(nèi)存模型
Person p = new Person( “l(fā)isi”, 44, “male”);
示例 Person.java PersonTest.java
內(nèi)存結(jié)構(gòu)參考java虛擬機(jī)視頻
Person p = new Person( “zhang”, 33,”male”);
Person q = new Person( “l(fā)isi”, 44, “male”);
如上所示孵淘,對(duì)象的屬性name 蒲障、age、sex都分配在堆內(nèi)存中瘫证,但是對(duì)象名 p揉阎、q都分配在棧內(nèi)存中。p 背捌、q也稱(chēng)為對(duì)象的引用(reference)毙籽,引用在java中是地址的同義詞。
訪問(wèn)對(duì)象:在其他類(lèi)中或main方法中毡庆,若想訪問(wèn)對(duì)象的屬性或是方法必須先實(shí)例化這個(gè)類(lèi)坑赡,然后通過(guò)對(duì)象名(引用)和點(diǎn)操作符來(lái)完成:
對(duì)象名. 屬性名();
對(duì)象名. 方法名()扭仁;
如果在類(lèi)內(nèi)的方法中垮衷,訪問(wèn)本類(lèi)的屬性和方法就可以直接訪問(wèn)了。
匿名對(duì)象
創(chuàng)建完對(duì)象乖坠,在調(diào)用該對(duì)象的方法時(shí)搀突,也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法熊泵。這樣的對(duì)象叫匿名對(duì)象
Person p1 = new Person();
p1.sayHello();
new Person().sayHello()
示例 Person.java PersonTest.java
使用匿名對(duì)象的情況
如果對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用
垃圾回收機(jī)制
Java的垃圾回收機(jī)制是自動(dòng)的仰迁,它保證程序健壯的主要手段,避免了由于程序員忘記回收內(nèi)存而引起的內(nèi)存泄漏顽分,同時(shí)也避免了回收內(nèi)存帶來(lái)的代碼繁瑣徐许。
垃圾回收機(jī)制實(shí)際上是JVM內(nèi)部運(yùn)行的一個(gè)優(yōu)先級(jí)比較低的后臺(tái)線程,這種多線程的模式使得java 具有更好的性能卒蘸,完全不用程序員參與雌隅。
垃圾回收機(jī)制僅僅作用于堆內(nèi)存,于棧內(nèi)存無(wú)關(guān)缸沃。
對(duì)于程序員來(lái)說(shuō)恰起,對(duì)象何時(shí)變成垃圾呢?
對(duì)象的引用被賦值為null趾牧; Person p = new Person( ); p = null;
一次性使用的匿名對(duì)象; new Person( ).sayHello( );
超出生命周期的检盼;如:
for( int I = 0; i< 100; i++){
Person p = new Person( );
}
這里,變量p 被實(shí)例化100次翘单,每結(jié)束一次循環(huán)吨枉,變量p就超出生命周期蹦渣,對(duì)象變?yōu)槔?
G1垃圾回收器
JDK7中引入了一個(gè)新的垃圾回收器,G1貌亭,它是Garbage First的縮寫(xiě)柬唯。G1回收器優(yōu)先回收垃圾最多的區(qū)域。為了實(shí)現(xiàn)這個(gè)策略它把堆分成了多個(gè)區(qū)域圃庭,就好比Java 7之前分成三個(gè)區(qū)域那樣(新生代权逗,老生代和持久代)。G1回收器是一個(gè)可預(yù)測(cè)的回收器冤议,同時(shí)對(duì)那些內(nèi)存密集型的程序它還能保證較高的吞吐量。
變量的作用域
類(lèi)變量
用static修飾的成員變量师坎,它們?cè)陬?lèi)被載入時(shí)創(chuàng)建恕酸,只要類(lèi)存在,static變量就存在
實(shí)例變量
類(lèi)體中聲明的成員變量胯陋,即非static的屬性
局部變量
方法體中聲明的變量蕊温,方法中的參數(shù),或代碼塊中聲明的變量遏乔,都是局部變量
局部變量只在方法調(diào)用的過(guò)程中有效义矛,方法調(diào)用結(jié)束后失效
變量的作用域
class Employee {
String name;//實(shí)例變量
int age;//實(shí)例變量
double salary;//實(shí)例變量
public String showName(){
String hello = “你好”;//hello為局部變量
System.out.println(hello+name);
return name;
}
public void updateName(String name2){//name2為局部變量
name = name2;
}
}
變量初始化的順序
隱式賦予變量默認(rèn)值
成員變量
顯式賦予初始值
通過(guò)構(gòu)造器體賦予新值
示例 PersianCat.java
類(lèi)型 缺省值 類(lèi)型 缺省值
byte (byte)0 char '\u0000 '
short (short)0 float 0.0F
int 0 double 0.0D
long 0L 引用對(duì)象 null
boolean false
各類(lèi)型變量默認(rèn)初始化值
this關(guān)鍵字
this關(guān)鍵字
代表對(duì)象自身的引用
一個(gè)引用
指向調(diào)用該方法的當(dāng)前對(duì)象
通常在類(lèi)的方法定義中使用
用this關(guān)鍵字的情況
方法中的變量與成員變量重名
在一個(gè)構(gòu)造器中,調(diào)用其它重載的構(gòu)造器
返回當(dāng)前對(duì)象的引用
示例 Employee.java Dog.java
本章重點(diǎn)總結(jié)
面向?qū)ο蟮乃枷?/h3>
類(lèi)的定義
什么是類(lèi)
類(lèi)的屬性
對(duì)象的創(chuàng)建和使用
創(chuàng)建對(duì)象
構(gòu)造器
this關(guān)鍵字
課后作業(yè)
- 定義一個(gè)點(diǎn)類(lèi)Point盟萨,包含2個(gè)成員變量x凉翻、y分別表示x和y坐標(biāo),2個(gè)構(gòu)造器Point()和Point(int x0,y0),以及一個(gè)movePoint(int dx,int dy)方法實(shí)現(xiàn)點(diǎn)的位置移動(dòng)捻激,創(chuàng)建兩個(gè)Point對(duì)象p1制轰、p2,分別調(diào)用movePoint方法后胞谭,打印p1和p2的坐標(biāo)垃杖。[必作題]
- 定義一個(gè)矩形類(lèi)Rectangle:(知識(shí)點(diǎn):對(duì)象的創(chuàng)建和使用)[必做題]
- 1.定義三個(gè)方法:getArea()求面積、getPer()求周長(zhǎng)丈屹,showAll()分別在控制臺(tái)輸出長(zhǎng)调俘、寬、面積旺垒、周長(zhǎng)彩库。
- 2 有2個(gè)屬性:長(zhǎng)length、寬width
- 3 通過(guò)構(gòu)造方法Rectangle(int width, int length)袖牙,分別給兩個(gè)屬性賦值
- 4 創(chuàng)建一個(gè)Rectangle對(duì)象侧巨,并輸出相關(guān)信息
- 定義一個(gè)筆記本類(lèi),該類(lèi)有顏色(char)和cpu型號(hào)(int)兩個(gè)屬性鞭达。 [必做題]
- 1 無(wú)參和有參的兩個(gè)構(gòu)造方法司忱;有參構(gòu)造方法可以在創(chuàng)建對(duì)象的同時(shí)為每個(gè)屬性賦值皇忿;
- 2 輸出筆記本信息的方法
- 3 然后編寫(xiě)一個(gè)測(cè)試類(lèi),測(cè)試筆記本類(lèi)的各個(gè)方法坦仍。
- 設(shè)計(jì)一個(gè)類(lèi)Student鳍烁,該類(lèi)包括姓名、學(xué)號(hào)和成績(jī)繁扎。設(shè)計(jì)一個(gè)方法幔荒,按照成績(jī)從高到低的順序輸出姓名、學(xué)號(hào)和成績(jī)信息梳玫。[選做題]
- 定義兩個(gè)類(lèi)爹梁,描述如下: [必做題]
- 1定義一個(gè)人類(lèi)Person:
- 1.1定義一個(gè)方法sayHello(),可以向?qū)Ψ桨l(fā)出問(wèn)候語(yǔ)“hello,my name is XXX”
- 1.2有三個(gè)屬性:名字提澎、身高姚垃、體重
- 2定義一個(gè)PersonCreate類(lèi):
- 2.1創(chuàng)建兩個(gè)對(duì)象,分別是zhangsan盼忌,33歲积糯,1.73;lishi谦纱,44看成,1.74
- 2.2分別調(diào)用對(duì)象的sayHello()方法。
- 定義兩個(gè)類(lèi)跨嘉,描述如下: [必做題]
- 1定義一個(gè)人類(lèi)Person:
- 1.1定義一個(gè)方法sayHello()川慌,可以向?qū)Ψ桨l(fā)出問(wèn)候語(yǔ)“hello,my name is XXX”
- 1.2有三個(gè)屬性:名字、身高偿荷、體重
- 1.3通過(guò)構(gòu)造方法窘游,分別給三個(gè)屬性賦值
- 2定義一個(gè)Constructor類(lèi):
- 2.1創(chuàng)建兩個(gè)對(duì)象,分別是zhangsan跳纳,33歲忍饰,1.73;lishi寺庄,44艾蓝,1.74
- 2.2分別調(diào)用對(duì)象的sayHello()方法。
- 定義一個(gè)汽車(chē)類(lèi)Vehicle斗塘,要求如下:[選做題]
- 1屬性包括:汽車(chē)品牌brand(String類(lèi)型)赢织、顏色color(String類(lèi)型)和速度speed(double類(lèi)型),并且所有屬性為私有馍盟。
- 2至少提供一個(gè)有參的構(gòu)造方法(要求品牌和顏色可以初始化為任意值于置,但速度的初始值必須為0)。
- 3為私有屬性提供訪問(wèn)器方法贞岭。注意:汽車(chē)品牌一旦初始化之后不能修改八毯。
- 4定義一個(gè)一般方法run()搓侄,用打印語(yǔ)句描述汽車(chē)奔跑的功能
- 5定義測(cè)試類(lèi)VehicleTest,在其main方法中創(chuàng)建一個(gè)品牌為“benz”话速、顏色為“black”的汽車(chē)讶踪。
分割線
什么是類(lèi)
類(lèi)的屬性
創(chuàng)建對(duì)象
構(gòu)造器
博主為咯學(xué)編程:父母不同意學(xué)編程,現(xiàn)已斷絕關(guān)系;戀人不同意學(xué)編程泊交,現(xiàn)已分手;親戚不同意學(xué)編程乳讥,現(xiàn)已斷絕來(lái)往;老板不同意學(xué)編程,現(xiàn)已失業(yè)三十年。廓俭。云石。。研乒。留晚。如果此博文有幫到你歡迎打賞,金額不限告嘲。。奖地。