JAVA語言程序設(shè)計(jì):第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義_第1頁
JAVA語言程序設(shè)計(jì):第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義_第2頁
JAVA語言程序設(shè)計(jì):第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義_第3頁
JAVA語言程序設(shè)計(jì):第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義_第4頁
JAVA語言程序設(shè)計(jì):第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第三章面向?qū)ο蟪绦蛟O(shè)計(jì)-類和對象的定義對象的概念;類的概念;如何定義類,創(chuàng)建對象;對象的創(chuàng)建過程-構(gòu)造方法對象的生命周期What? 什么是對象? 什么是類?一、對象的概念具體事物:特征: 體重,身高,性別,年齡行為: 吃飯,睡覺,走路,說話一、對象的概念特征:內(nèi)容,書名,作者,頁數(shù),是否能借到用途:陶冶情操,豐富視野一、對象的概念結(jié)論對象是指具體的事物,具有靜態(tài)的特征和動態(tài)的行為或用途。Java語言中,靜態(tài)的特征稱為屬性,動態(tài)的行為或用途稱為方法新的問題平時我們談話的風(fēng)格:吃飯:服務(wù)員給我們拿瓶啤酒!上班:我騎自行車來的/我開車來的!用具體事物的一般特征來代替具體事物是人類描述世界的天性 二、

2、類類:對具體事物的一般特征進(jìn)行的抽象描述。換句話說,類是具有相同屬性和行為的一組對象的集合類也有屬性和行為抽象性思維是人的天性: 二、類 類是概念模型, 定義對象的所 有特性和所需 的操作對象是真實(shí)的模型類和對象類定義實(shí)體對象是實(shí)際的實(shí)體類是對象的原型所有屬于同一個類的對象都具有相同的特性和操作類和對象的區(qū)別 二、類區(qū)分類和對象人學(xué)號為31113101的學(xué)生啤酒紀(jì)樂平的汽車新的問題對于同一類事物,我們都會得出相同的屬性?學(xué)會從不同的角度思考問題根據(jù)系統(tǒng)的需要定義屬性和方法。例:書從讀者角度:頁數(shù)作者書名價格從出版商角度:紙張質(zhì)量開本廢品回收站重量價格/多少錢一斤How? 如何定義類? 如何創(chuàng)建

3、類的具體實(shí)例對象?三、 定義類類的聲明語法類的修飾字 class 類名稱 extends 父類名稱implements 接口名稱列表 變量定義及初始化;方法定義及方法體;修飾符可以為 public | protected | private ,缺省方式為friendly 。三、 定義類1. 成員變量定義格式變量修飾字 變量數(shù)據(jù)類型 變量名1,變量名2=變量初值;變量修飾符可以為 public | protected | private static final transient volatile。成員變量的類型可以是Java中任意的數(shù)據(jù)類型,包括簡單類型,類,接口,數(shù)組。在一個類中的成員變量

4、應(yīng)該是唯一的。三、 定義類2. 成員方法定義格式方法修飾字 返回類型 方法名稱(參數(shù)1,參數(shù)2,) throws exceptionList(statements;)/方法體:方法的內(nèi)容三、 定義類不能為 Java 中的關(guān)鍵字不能包含空格或點(diǎn)號“.”可以下劃線“_”、字母或“$”符號開頭類名、屬性名,方法名的命名規(guī)則:三、 定義類class Book String bookName; String authorName; int nopages; boolean available;從讀者角度出發(fā)生成的代碼屬性三、 定義類class Book String bookName; String a

5、uthorName; int nopages; boolean available; void isAvailable() if(available = true) System.out.println(有這本書); .方法三、 定義類【例1】 編程創(chuàng)建一個Box類,在其中定義3個變量表示一個立方體的長、寬和高;定義一個方法求立方體的體積;定義一個方法求立方體的表面積。三、 定義類public class Box double length;double width;double height;public double getV()return length*width*height;pub

6、lic double getArea()return 2*(length*width+length*height+width*height);四、創(chuàng)建對象Book hongLou = new Book();/創(chuàng)建紅樓對象對象中的屬性和方法可使用圓點(diǎn)符號來訪問對象在圓點(diǎn)左邊,而屬性或方法在圓點(diǎn)右邊例如: hongLou.bookName = “紅樓夢”; hongLou.authorName = “曹雪芹”; hongLou.isAvailable();四、創(chuàng)建對象例1的測試方法public static void main(String args)Box box1=new Box();box1

7、.length=200;box1.width=200;box1.height=200;System.out.println(第1個箱子的體積為:+box1.getV()+,表面積為:+box1.getArea();Box box2=new Box();box2.length=100;box2.width=100;box2.height=100;System.out.println(第2個箱子的體積為:+box1.getV()+,表面積為:+box1.getArea();隨堂練習(xí)屬性姓名年齡職業(yè)方法顯示信息走路吃飯 Human類How?對象的創(chuàng)建過程-構(gòu)造方法?五、構(gòu)造方法Box box1 =

8、new Box();new調(diào)用構(gòu)造方法,創(chuàng)建一個類的實(shí)例(對象)通過使用new關(guān)鍵字為對象分配內(nèi)存,初始化實(shí)例變量,并調(diào)用構(gòu)造方法。那么Box()是什么意思呢?這個Box()就是一個特殊的方法叫構(gòu)造方法。那為什么在程序中沒有看到這個方法的定義呢,那是因?yàn)樵跊]有定義構(gòu)造方法的時候,系統(tǒng)會自已創(chuàng)建一個默認(rèn)的構(gòu)造方法。 構(gòu)造方法(Constructor)是一種特殊的方法。Java中的每個類都有構(gòu)造方法,用來初始化該類的一個新的對象。 構(gòu)造方法具有和類名相同的名稱, 沒有返回任何數(shù)據(jù)類型的返回值, 系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行。(通過new調(diào)用) 五、構(gòu)造方法 五、構(gòu)造方法編程實(shí)例觀察構(gòu)造方法被自動調(diào)用

9、在類中加這樣的一個方法public Box()System.out.println(來到構(gòu)造方法);運(yùn)行結(jié)果為: 來到構(gòu)造方法 第一個箱子的體積為:8000000.0,表面積為:240000.0 來到構(gòu)造方法 第二個箱子的體積為:8000000.0,表面積為:240000.0通過運(yùn)行的結(jié)果讀者會發(fā)現(xiàn),在main() 方法中并沒有調(diào)用Box()方法,但它卻被自動調(diào)用了,而且每創(chuàng)建一個Box對象,這個方法都會被自動調(diào)用一次,這就是“構(gòu)造方法”。五、構(gòu)造方法構(gòu)造方法應(yīng)包含的內(nèi)容: 定義一些初始值或內(nèi)存配置工作;如果程序中沒有定義構(gòu)造方法,則創(chuàng)建實(shí)例時使用的是缺省構(gòu)造方法,它是一個無內(nèi)容的空方法。這個

10、缺省構(gòu)造方法將類中變量自動初始化為該類型的默認(rèn)值。具體如下:五、構(gòu)造方法構(gòu)造方法的應(yīng)用-對象初始化 整型初始化為0; 實(shí)型初始化為0.0f、0.0d; 邏輯型初始化為false; 字符型初始化為u0000; 類對象初始化為null,表明不指向任何內(nèi)存地址的引用 五、構(gòu)造方法兩種構(gòu)造方法參數(shù)化構(gòu)造方法(自己定義的構(gòu)造方法)隱式構(gòu)造方法(系統(tǒng)自動產(chǎn)生的構(gòu)造方法)一定要注意,類中沒有定義并不表明就沒有構(gòu)造方法。一旦有了自己定義的構(gòu)造方法,系統(tǒng)就不會自動產(chǎn)生。五、構(gòu)造方法五、構(gòu)造方法拓展類中定義的變量在對象被創(chuàng)建時被自動賦于初值;方法體中定義的變量都是局部變量,只能在方法體中使用,并且方法體中定義的變

11、量必須初始化賦值后才能使用。隨堂編程屬性姓名年齡職業(yè)方法構(gòu)造方法顯示信息走路吃飯 Human類總結(jié) 對象由狀態(tài)和行為組成;類是具有相同屬性和行為的一組對象的集合;類的變量和方法可被該類的實(shí)例訪問;圓點(diǎn)符號用于訪問對象的成員,屬性和方法;構(gòu)造方法在創(chuàng)建對象時初始化對象,分為顯式和隱式兩種情況。六、this,關(guān)鍵字this, 當(dāng)前類的對象一般可以省略,但有了不容易混淆。class AString str1;public void setStr1(String srt1) this.str1=str1 七、對象的生命周期類定義:類定義之后,只是產(chǎn)生了對事物的描述,并沒有生成事物的實(shí)例。對象創(chuàng)建:必須

12、對一個類進(jìn)行實(shí)例化,來生成客觀事物的內(nèi)存映像,這就是對象的創(chuàng)建。需要內(nèi)存空間保存。對象使用:對象被創(chuàng)建之后必定要顯示它的一些特性和表現(xiàn)一些行為,這就是對象的使用。對象消亡:任何事情都有它的生存周期,因此當(dāng)對象不再被使用的時候(即沒有任何的引用變量指向它時),對象就變成了垃圾,這就是對象的消忘。七、對象的生命周期1. 垃圾回收的概念Java提供了一種叫做垃圾回收的機(jī)制來避免程序員忽略垃圾的處理,Java自動幫我們完成垃圾回收的工作,而不需程序員再考慮。在Java程序運(yùn)行過程中,一個垃圾回收器會不定時地被喚起檢查是否有不再被使用的對象,并釋放它們占用的內(nèi)存空間。垃圾回收器的啟用不由程序員控制,也無

13、規(guī)律可循,并不會一產(chǎn)生了垃圾,它就被喚起,甚至有可能到程序終止,它都沒有啟動的機(jī)會。七、對象的生命周期Finalize方法 在對對象進(jìn)行垃圾收集前,Java運(yùn)行時系統(tǒng)會自動調(diào)用對象的finalize() 方法來釋放系統(tǒng)資源。該方法必須按如下方式聲明:protected void finalize() throws Throwable finalize()方法是在java.lang.Object中實(shí)現(xiàn)的,在用戶自定義的類中,它可以被覆蓋,但一般在最后要調(diào)用父類的finalize()方法來清除對象所使用的所有資源。protected void finalize() throws Throwable

14、 /釋放本類中使用的資源 super.finalize();七、對象的生命周期System.gc的作用Java的垃圾回收器的執(zhí)行的偶然性有時候也會給程序帶來麻煩,如果在一個對象成為垃圾時需要馬上釋放,或者程序在某個時間內(nèi)產(chǎn)生大量的垃圾時,希望能有一個人工干預(yù)的方法.Java里提供了一個System.gc方法,使用這個方法可以強(qiáng)制啟動垃圾回收器回收垃圾.七、對象的生命周期例子:1、自動收集2、人工收集七、對象的生命周期public class Back public static void main(String args)for(int i=0;i10000;i+)new Student();

15、class StudentString name;int age;String address;protected void finalize() throws ThrowableSystem.out.print(調(diào)用finalize()方法);super.finalize();總結(jié)對象類類和對象的區(qū)別JAVA中類的定義和對象的創(chuàng)建構(gòu)造方法對象生命周期八、方法方法的重載Java語言允許在一個類中定義幾個同名的方法,只要這些方法具有不同的參數(shù)列表,即方法的參數(shù)類型不同,或方法參數(shù)的個數(shù)不同,或方法參數(shù)的次序不同。這種做法稱為方法的重載。 當(dāng)調(diào)用類中重載的方法時,Java能夠根據(jù)方法參數(shù)的不同選擇

16、正確的方法來調(diào)用。八、方法1. 成員方法的重載調(diào)用語句的自變量列表必須足夠判明要調(diào)用的是哪個方法。重載方法的參數(shù)表必須不同。參數(shù)不同主要是參數(shù)類型、順序和個數(shù)不同。八、方法八、方法重載方法的返回類型可以相同,也可以不同。但如果僅僅是返回類型不同,而方法名和形參表都相同,則是非法的。例:class Astatic int f(int a)return 1;static double f(int a)return 1.0;public static void main(String args)f(1);/無法判斷調(diào)用哪個方法八、方法1)不同的參數(shù)個數(shù);2)不同的參數(shù)類型;3)不同的參數(shù)次序;八、方

17、法2. 構(gòu)造方法的重載當(dāng)一個類因構(gòu)造函數(shù)的重載而存在多個構(gòu)造函數(shù)時,創(chuàng)建該類對象的語句會根據(jù)給出的實(shí)際參數(shù)的個數(shù),參數(shù)的類型,參數(shù)的順序自動調(diào)用相應(yīng)的構(gòu)造函數(shù)來完成新對象的初始化工作。當(dāng)一個類有多個重載的構(gòu)造函數(shù)時,它們之間可以相互調(diào)用,這種調(diào)用通過關(guān)鍵字this實(shí)現(xiàn),同時this調(diào)用語句必須是構(gòu)造函數(shù)中的第一個可執(zhí)行語句。八、方法八、方法方法間參數(shù)的傳遞方式方法一般有參數(shù);方法的調(diào)動需要傳遞參數(shù),實(shí)參;在面向?qū)ο蟮某绦蛟O(shè)計(jì)里,實(shí)參是如何傳遞的呢?八、方法方法間參數(shù)的傳遞方式是值傳遞class PassValuepublic static void main(String args)int x

18、=5;change(x);System.out.println(x);public static void change(int x)X=3八、方法方法間參數(shù)的傳遞方式是值傳遞1、基本數(shù)據(jù)類型的參數(shù)傳遞方法的形式參數(shù)就相當(dāng)于方法中定義的局部變量,方法調(diào)用結(jié)束時也就被釋放了,不會影響到主程序中同名的局部變量。八、方法方法間參數(shù)的傳遞方式是值傳遞Calss PassRefint x;public static void main(String args)PassRet obj=new PassRef();obj.x=5;change(obj);System.out.println(obj.x);public static void change(PassRef obj)obj.x=3;八、方法方法間參數(shù)的傳遞方式是值傳遞2、引用數(shù)據(jù)類型的參數(shù)傳遞對象的引用變量并不是對象本身,它們只是對象的名柄(名稱)。就好象一個人有多個名稱一樣(中文名,英文名),一個對象可以有多個句柄。八、方法方法間參數(shù)的傳遞方式是值傳遞main方法中的內(nèi)存狀況change方法中的內(nèi)存狀況ox3000堆內(nèi)存 50 x3000obj?PassRet o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論