Java基礎(chǔ)應(yīng)用編程—— 面向?qū)ο蠡A(chǔ)

本章內(nèi)容



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

?面向過程編程

–傳統(tǒng)的C語言屬于面向過程編程请敦。面向過程解決問題的思路:通常是分析出解決問題所需要的步驟舀射,然后用方法把這些步驟一步一步實現(xiàn),最后一個一個依次調(diào)用方法來解決捡偏。

案例:ATM提款機終端系統(tǒng)(面向過程編程)

–步驟1:輸入密碼纱扭,系統(tǒng)判斷是否正確,如正確棍矛,進(jìn)入取款界面安疗,如錯誤,提示重新輸入茄靠。

–步驟2:進(jìn)入取款界面茂契,輸入取款金額,系統(tǒng)判斷余額是否足夠慨绳,如不足掉冶,提示真竖;如足夠,點鈔厌小。

–步驟3:吐出鈔票恢共,打印票據(jù)。

面向過程編程考慮的問題是程序運行的流程璧亚,主要是程序的算法讨韭,而數(shù)據(jù)只是在必要的時候插入到算法中間。

面向?qū)ο缶幊蹋∣OP:Object-Oriented Programming )

從現(xiàn)實世界中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng)癣蟋,并在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式透硝,強調(diào)直接以問題域中的事物為中心來思考問題,認(rèn)識問題疯搅,并根據(jù)這些事物的本質(zhì)特點濒生,把它們抽象地表示為系統(tǒng)中的對象,作為系統(tǒng)的基本構(gòu)成單位幔欧。面向?qū)ο蠼鉀Q問題的思路:通常是把構(gòu)成問題域的事務(wù)分解成各個對象罪治,給對象賦予相應(yīng)的屬性和行為,通過多個對象的相互協(xié)調(diào)來解決問題礁蔗。建立對象的目的不是為了完成一個步驟觉义,而是為了描敘某個事物在整個解決問題的步驟中的行為 。支持面向?qū)ο缶幊淌荍ava 語言的重要特點浴井。

案例:ATM提款機終端系統(tǒng)(面向?qū)ο缶幊?




面向過程



面向?qū)ο?/h2>



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


面向?qū)ο蠡靖拍?/h2>

–抽象(abstract):

?????????從事物中舍棄個別的非本質(zhì)特征晒骇,抽取共同的本質(zhì)特征

?????????只考慮與問題域相關(guān)的信息,而忽略與問題域不相關(guān)的部分

? ?–對象(object):是系統(tǒng)中用來描述客觀事物的一個實體磺浙。

?可以是有形的厉碟,也可以是無形的(如一個客戶,一張銀行卡屠缭,窗體中的一個按鈕等等)

? 對象是構(gòu)成世界的一個獨立單位

?具有自己的靜態(tài)結(jié)構(gòu)(屬性)和動態(tài)行為(方法)

? 每個對象有自己的唯一標(biāo)識

類(class):

類是一組具有相同屬性和行為的對象的抽象,

類的作用是用來創(chuàng)建對象崭参,對象是類的一個實例

類和對象的關(guān)系

抽象和具體的關(guān)系呵曹。

每一個類在某一時刻都有零個或更多的實例, 類是生成對象的模板

一個類定義了使用哪些數(shù)據(jù)來描述屬性何暮,每一個對象都有相應(yīng)的屬性值數(shù)據(jù)奄喂,

一個類通過一系列方法來定義行為,這些方法能在每個對象中被激活

面向?qū)ο笾饕卣?br>

封裝(encapsulation):

所謂封裝是把對象的屬性和行為結(jié)合在一個獨立的系統(tǒng)單位內(nèi)部

盡可能隱蔽對象的內(nèi)部細(xì)節(jié)海洼,只向外部提供接口

降低對象間的耦合度

封裝的重要意義:

? ? 使對象能夠集中而完整地描述并對應(yīng)一個具體事物

? ? 體現(xiàn)了事物的相對獨立性跨新,使對象外部不能隨意存取對象的內(nèi)部數(shù)據(jù)

繼承(inheritance):

也稱泛化,繼承性是子類自動共享父類屬性和方法的機制坏逢,在定義和實現(xiàn)一個類的時候域帐,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行赘被,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入自己若干新的內(nèi)容繼承簡化了人們對事物的認(rèn)識和描述肖揣,有益于軟件復(fù)用民假,是OO技術(shù)提高軟件開發(fā)效率的重要原因之一是類之間的一種關(guān)系,一般類與特殊類之間的關(guān)系繼承關(guān)系的語義:“is a kindof”

多態(tài)(polymorphism):

指同一個命名可具有不同的語義

OO方法中龙优,常指在一般類中定義的屬性或方法被特殊類繼承之后羊异,可以具有

不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,對于子類彤断,可用不同的方法替代實現(xiàn)父

類的服務(wù)的方法

類的定義

什么是類

把相似的對象劃歸成一個類野舶。

在軟件設(shè)計中,類宰衙,就是一個模板平道,它定義了通用于一個特定種類的所有對象

的屬性(變量)和行為(方法)。



什么是類菩浙? 示例 XiyoujiRole.java

西游記游戲軟件中的游戲人物

孫悟空:孫悟空的武器是金箍棒巢掺,戰(zhàn)斗力五顆星,耐力五顆星

唐? 僧:唐僧沒有武器劲蜻,戰(zhàn)斗力為零陆淀,耐力五顆星

豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星先嬉,耐力兩顆星

沙? 僧:沙僧的武器是月牙鏟 轧苫,戰(zhàn)斗力三顆星,耐力四顆星


類的格式



類的格式

示例

Employee.java



類的成員

成員變量:

[修飾符] 類型 屬性名=[默認(rèn)值];

其中修飾符有:public疫蔓、private含懊、protected,也可以省略不寫。

例如:


方法:

[修飾符] 返回值類型 方法名(形參列表){ 語句}

對象的創(chuàng)建和使用

什么是對象

類(class) — 是對某一類事物的描述對象(object) — 是實際存在的某類事物的個體衅胀, 也稱為實例(instance)類是創(chuàng)建對象的模板岔乔,對象是類的實例。



創(chuàng)建對象

語法格式

類名 對象名 =new構(gòu)造器

示例

Employee zhang =newEmployee( )

示例 TestEmployee.java

構(gòu)造器(構(gòu)造方法/構(gòu)造器滚躯,Constructor)


構(gòu)造器的作用

完成對象的創(chuàng)建雏门,即完成對象的實例化一般使用構(gòu)造器來完成對成員變量的初始化 示例Employee.java


通過實例Person ,可以看到使用帶參數(shù)的構(gòu)造器進(jìn)行實例化簡化了代碼掸掏,在創(chuàng)建對象的同時給對象的屬性賦值茁影。此時,類由一個抽象的藍(lán)圖變化為一個具體的對象丧凤,同時對象的屬性已經(jīng)賦值募闲。通過多次調(diào)用構(gòu)造器,一個類可以實例化出多個對象愿待。

構(gòu)造器也是方法浩螺,但是它是特殊的方法而已靴患。它也可以像普通方法一樣發(fā)生重載。通常一個類中不止一個構(gòu)造方法年扩,而是有多個不同參數(shù)的構(gòu)造器蚁廓,用戶可以根據(jù)需要選擇不同的構(gòu)造器創(chuàng)建對象。

注意在開發(fā)中厨幻,我們在編寫自己的類時相嵌,應(yīng)該根據(jù)需要提供相應(yīng)的構(gòu)造器,保證在使用這個類時况脆,能夠選擇到合適的構(gòu)造方法饭宾。

所有的對象都是通過構(gòu)造器來創(chuàng)建的,也可以說任何對象都是通過內(nèi)存分配操作符new 創(chuàng)建和開辟內(nèi)存空間的格了。如果在開發(fā)時看铆,沒有明確的寫出構(gòu)造方法,在編譯時編譯器會發(fā)現(xiàn)該類沒有構(gòu)造器盛末,這時編譯器會自動的給這個類增加一個構(gòu)造器弹惦,該構(gòu)造器沒有任何參數(shù),我們稱之為“默認(rèn)的空構(gòu)造器”悄但。相反棠隐,如果我們在編寫時,手寫了一個或是若干個帶參的構(gòu)造器檐嚣,那么助泽,這個不帶參的空構(gòu)造器就不會再自動產(chǎn)生并存在。在這樣的情況下嚎京,如果在某些情況下還想使用這樣的無參數(shù)默認(rèn)構(gòu)造器的話嗡贺,最好還是養(yǎng)成手寫出這個無參數(shù)的構(gòu)造器來,以備后用鞍帝。否則在這個類中诫睬,將不再存在這個默認(rèn)的構(gòu)造器。



默認(rèn)的構(gòu)造器

在Java中帕涌,每個類都至少要有一個構(gòu)造器岩臣,如果程序員沒有在類里定義構(gòu)造器,系統(tǒng)會自動為這個類產(chǎn)生一個默認(rèn)的訪問權(quán)限為public且參數(shù)列表為空的構(gòu)造器


一旦編程者為該類定義了構(gòu)造器宵膨,系統(tǒng)就不再提供默認(rèn)的構(gòu)造器

? 練習(xí)


對象創(chuàng)建的內(nèi)存模型

在java中所有的變量、數(shù)組炸宵、對象都是分配在內(nèi)存中的辟躏,根據(jù)變量類型的不同分配的內(nèi)存也有所不同。Java中主要有3種類型的變量:

局部變量:定義在方法體中的變量土全;或是方法的形參捎琐。

實例變量:即類的屬性会涎,也是全局變量。

靜態(tài)變量:在類中聲明為static的屬性瑞凑。


內(nèi)存的類別



堆和棧分別存儲哪些變量末秃?

除了8種基本數(shù)據(jù)類型的變量,其他變量都是引用類型變量

類(class)



接口(interface)

Animal a ;

數(shù)組

int[ ] c ;

對象創(chuàng)建的內(nèi)存模型

Person p =newPerson( “l(fā)isi”,44, “male”);

示例 Person.java PersonTest.java


內(nèi)存結(jié)構(gòu)參考java虛擬機視頻

Person p =newPerson( “zhang”,33,”male”);

Person q =newPerson( “l(fā)isi”,44, “male”);


如上所示籽御,對象的屬性name 练慕、age、sex都分配在堆內(nèi)存中技掏,但是對象名 p铃将、q都分配在棧內(nèi)存中。p 哑梳、q也稱為對象的引用(reference)劲阎,引用在java中是地址的同義詞。

訪問對象:在其他類中或main方法中鸠真,若想訪問對象的屬性或是方法必須先實例化這個類悯仙,然后通過對象名(引用)和點操作符來完成:

匿名對象

創(chuàng)建完對象,在調(diào)用該對象的方法時吠卷,也可以不定義對象的句柄锡垄,而直接調(diào)用這個對象的方法。這樣的對象叫匿名對象


示例 Person.java PersonTest.java

使用匿名對象的情況

如果對一個對象只需要進(jìn)行一次方法調(diào)用

垃圾回收機制

Java的垃圾回收機制是自動的撤嫩,它保證程序健壯的主要手段偎捎,避免了由于程序員忘記回收內(nèi)存而引起的內(nèi)存泄漏,同時也避免了回收內(nèi)存帶來的代碼繁瑣序攘。

垃圾回收機制實際上是JVM內(nèi)部運行的一個優(yōu)先級比較低的后臺線程茴她,這種多線程的模式使得java 具有更好的性能,完全不用程序員參與程奠。

垃圾回收機制僅僅作用于堆內(nèi)存丈牢,于棧內(nèi)存無關(guān)。

對于程序員來說瞄沙,對象何時變成垃圾呢己沛?




G1垃圾回收器

JDK7中引入了一個新的垃圾回收器,G1距境,它是Garbage First的縮寫申尼。G1回收器優(yōu)先回收垃圾最多的區(qū)域。為了實現(xiàn)這個策略它把堆分成了多個區(qū)域垫桂,就好比Java 7之前分成三個區(qū)域那樣(新生代师幕,老生代和持久代)。G1回收器是一個可預(yù)測的回收器诬滩,同時對那些內(nèi)存密集型的程序它還能保證較高的吞吐量霹粥。

變量的作用域

類變量

用static修飾的成員變量灭将,它們在類被載入時創(chuàng)建,只要類存在后控,static變量就存在

實例變量

類體中聲明的成員變量庙曙,即非static的屬性

局部變量

方法體中聲明的變量,方法中的參數(shù)浩淘,或代碼塊中聲明的變量捌朴,都是局部變量

局部變量只在方法調(diào)用的過程中有效,方法調(diào)用結(jié)束后失效

變量的作用域


變量初始化的順序

隱式賦予變量默認(rèn)值

成員變量

顯式賦予初始值

通過構(gòu)造器體賦予新值

示例 PersianCat.java



this關(guān)鍵字

this關(guān)鍵字


代表對象自身的引用

一個引用

指向調(diào)用該方法的當(dāng)前對象

通常在類的方法定義中使用

用this關(guān)鍵字的情況

方法中的變量與成員變量重名

在一個構(gòu)造器中馋袜,調(diào)用其它重載的構(gòu)造器

返回當(dāng)前對象的引用

示例? Employee.java? ? ? Dog.java

本章重點總結(jié)

面向?qū)ο蟮乃枷?/h3>

類的定義

什么是類

類的屬性

對象的創(chuàng)建和使用

創(chuàng)建對象

構(gòu)造器

this關(guān)鍵字

課后作業(yè)


定義一個點類Point男旗,包含2個成員變量x、y分別表示x和y坐標(biāo)欣鳖,2個構(gòu)造器Point()和Point(int x0,y0),以及一個movePoint(int dx,int dy)方法實現(xiàn)點的位置移動察皇,創(chuàng)建兩個Point對象p1、p2泽台,分別調(diào)用movePoint方法后什荣,打印p1和p2的坐標(biāo)。[必作題]

定義一個矩形類Rectangle:(知識點:對象的創(chuàng)建和使用)[必做題]

1.定義三個方法:getArea()求面積怀酷、getPer()求周長稻爬,showAll()分別在控制臺輸出長、寬蜕依、面積桅锄、周長。

2 有2個屬性:長length样眠、寬width

3? 通過構(gòu)造方法Rectangle(int width, int length)友瘤,分別給兩個屬性賦值

4? 創(chuàng)建一個Rectangle對象,并輸出相關(guān)信息

定義一個筆記本類檐束,該類有顏色(char)和cpu型號(int)兩個屬性辫秧。 [必做題]

1 無參和有參的兩個構(gòu)造方法;有參構(gòu)造方法可以在創(chuàng)建對象的同時為每個屬性賦值被丧;

2? 輸出筆記本信息的方法

3? 然后編寫一個測試類盟戏,測試筆記本類的各個方法。

設(shè)計一個類Student甥桂,該類包括姓名柿究、學(xué)號和成績。設(shè)計一個方法黄选,按照成績從高到低的順序輸出姓名蝇摸、學(xué)號和成績信息。[選做題]

定義兩個類,描述如下: [必做題]

1定義一個人類Person:

1.1定義一個方法sayHello()探入,可以向?qū)Ψ桨l(fā)出問候語“hello,my name is XXX”

1.2有三個屬性:名字、身高懂诗、體重

2定義一個PersonCreate類:

2.1創(chuàng)建兩個對象蜂嗽,分別是zhangsan,33歲殃恒,1.73植旧;lishi,44离唐,1.74

2.2分別調(diào)用對象的sayHello()方法病附。

定義兩個類,描述如下: [必做題]

1定義一個人類Person:

1.1定義一個方法sayHello()亥鬓,可以向?qū)Ψ桨l(fā)出問候語“hello,my name is XXX”

1.2有三個屬性:名字完沪、身高、體重

1.3通過構(gòu)造方法嵌戈,分別給三個屬性賦值

2定義一個Constructor類:

2.1創(chuàng)建兩個對象覆积,分別是zhangsan,33歲熟呛,1.73宽档;lishi,44庵朝,1.74

2.2分別調(diào)用對象的sayHello()方法吗冤。

定義一個汽車類Vehicle,要求如下:[選做題]

1屬性包括:汽車品牌brand(String類型)九府、顏色color(String類型)和速度speed(double類型)椎瘟,并且所有屬性為私有。

2至少提供一個有參的構(gòu)造方法(要求品牌和顏色可以初始化為任意值昔逗,但速度的初始值必須為0)降传。

3為私有屬性提供訪問器方法。注意:汽車品牌一旦初始化之后不能修改勾怒。

4定義一個一般方法run()婆排,用打印語句描述汽車奔跑的功能

5定義測試類VehicleTest,在其main方法中創(chuàng)建一個品牌為“benz”笔链、顏色為“black”的汽車段只。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鉴扫,隨后出現(xiàn)的幾起案子赞枕,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕婶,死亡現(xiàn)場離奇詭異姐赡,居然都是意外死亡,警方通過查閱死者的電腦和手機柠掂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門项滑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涯贞,你說我怎么就攤上這事枪狂。” “怎么了宋渔?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵州疾,是天一觀的道長。 經(jīng)常有香客問我皇拣,道長严蓖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任审磁,我火速辦了婚禮谈飒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘态蒂。我一直安慰自己杭措,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布钾恢。 她就那樣靜靜地躺著手素,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘩蚪。 梳的紋絲不亂的頭發(fā)上泉懦,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音疹瘦,去河邊找鬼崩哩。 笑死,一個胖子當(dāng)著我的面吹牛言沐,可吹牛的內(nèi)容都是我干的邓嘹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼险胰,長吁一口氣:“原來是場噩夢啊……” “哼汹押!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起起便,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤棚贾,失蹤者是張志新(化名)和其女友劉穎窖维,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙痹,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡铸史,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怯伊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛贪。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖震贵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情水评,我是刑警寧澤猩系,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站中燥,受9級特大地震影響寇甸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疗涉,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一拿霉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咱扣,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至偏瓤,卻和暖如春杀怠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厅克。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工赔退, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人证舟。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓硕旗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親褪储。 傳聞我的和親對象是個殘疾皇子卵渴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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