版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章 對(duì)象與類對(duì)象與類n3.1 類與對(duì)象類與對(duì)象n3.2 定義類定義類n3.3 成員變量的作用域成員變量的作用域n3.4 方法重載方法重載 n3.5 創(chuàng)建對(duì)象創(chuàng)建對(duì)象 n3.6 構(gòu)造方法構(gòu)造方法 n3.7 this關(guān)鍵字關(guān)鍵字 n3.8 初始化問題初始化問題 n3.9 static 關(guān)鍵字關(guān)鍵字n3.10 對(duì)象的清理對(duì)象的清理 n3.11 訪問控制修飾符訪問控制修飾符n3.12 具體隱藏實(shí)現(xiàn)具體隱藏實(shí)現(xiàn) n3.13 參數(shù)傳遞參數(shù)傳遞 n3.14 總結(jié)總結(jié) 3.1 3.1 定義類定義類n傳統(tǒng)程序設(shè)計(jì)語言的不足 數(shù)據(jù)和對(duì)數(shù)據(jù)的操作相分離 n面向?qū)ο笤O(shè)計(jì)的思想n什么是對(duì)象 一切都是對(duì)象n對(duì)象
2、與類的關(guān)系 類是對(duì)象的模版,對(duì)象是類的實(shí)例3.2 3.2 定義類定義類 類是組成程序的基本單元,定義了自己的類就是定義了要使用的對(duì)象的類型。 例:定義一個(gè)汽車類:例:定義一個(gè)汽車類:class Car int color; int door; int speed; void start() void brake() 聲明一個(gè)汽車類的引用變量: Car myCar;聲明類的語法:修飾符 class 類名稱 /成員變量 /方法JavaJava基本數(shù)據(jù)類型基本數(shù)據(jù)類型Java數(shù)據(jù)類型包括基本數(shù)據(jù)類型和引用類型包裝器類型把基本數(shù)據(jù)類型數(shù)據(jù)“包裝”成對(duì)象 從 int類型創(chuàng)建一個(gè)Integer對(duì)象:int
3、 myInt; Integer myInteger = new Integer(myInt); 從包裝對(duì)象中取出基本類型值:myInt = myIValue();JavaJava基本數(shù)據(jù)類型基本數(shù)據(jù)類型第一個(gè)第一個(gè)JavaJava程序程序 程序3.1 Rectangle.javaclass Rectangle int a,b; int getArea() return a*b; void locate(int x,int y) System.out.println(The position s(+x+,+y+); public static void main(String
4、 args) Rectangle r1=new Rectangle();r1.locate(3,4);r1.a=2;r1.b=3;int area=r1.getArea();System.out.println(Area of r1 is:+area);第一個(gè)第一個(gè)JavaJava程序程序nmain方法是程序的入口 n包含main方法的類是Java應(yīng)用程序的主類 n一個(gè)Java源文件可以包含多個(gè)類,但同一個(gè)Java源文件只有主類可以聲明為public nJava源文件的命名必須與主類同名 3.33.3成員變量的作用域成員變量的作用域n在Java中變量的作用域是由大括號(hào)組成的程序塊決定n在不嵌套
5、的程序塊中可以多次聲明相同變量 n在嵌套的程序塊中不允許重復(fù)聲明同名的變量n聲明在方法中的變量為局部變量,與實(shí)例變量重名的局部變量會(huì)覆蓋實(shí)例變量,其作用域?yàn)檎麄€(gè)方法體。 見程序3.2 TestScoping.java作用域舉例作用域舉例int x= 1; int y=2 /xy可用 / x可用y超出作用域合法的聲明: int x=1; int x=2; 不合法的嵌套聲明:int x=1; int x=2; 3.43.4方法重載方法重載方法重載(Overload)是指一個(gè)類中可以定義參數(shù)列表不同但名字相同的多個(gè)方法,調(diào)用時(shí),會(huì)根據(jù)不同的參數(shù)列表來選擇對(duì)應(yīng)的方法 。n重載的方法名字必須相同n重載的
6、方法參數(shù)必須不同當(dāng)一個(gè)重載方法被調(diào)用時(shí),Java 用參數(shù)的類型和(或)數(shù)量來表明實(shí)際調(diào)用的重載方法的版本。每個(gè)重載方法的參數(shù)的類型和(或)數(shù)量必須是不同的。雖然每個(gè)重載方法可以有不同的返回 類型,但返回類型并不足以區(qū)分所使用的是哪個(gè)方法。當(dāng)Java 調(diào)用一個(gè)重載方法時(shí),參數(shù)與調(diào)用參數(shù)匹配的方法被執(zhí)行。 見程序3.3 TestOverload.java 程序3.4 TestOverload1.java被重載的方法必須有不同的參數(shù)列表,前面例子區(qū)分重載方法的參數(shù)采用了或者數(shù)量不同,或者類型不同,參數(shù)順序不同雖然也可以重載,但是容易產(chǎn)生歧義 。例:程序3.5 TestOverload2.javapu
7、blic class TestOverload2 void print(int a,float b) System.out.println(Print int a and float b: + a + + b);void print(float a,int b) System.out.println(Print float a and int b: + a + + b); public static void main(String args) TestOverload2 obj = new TestOverload2(); obj.print(1,2); 3.53.5創(chuàng)建對(duì)象創(chuàng)建對(duì)象n先聲名
8、引用變量 Rectangle r1; 然后創(chuàng)建對(duì)象賦值給r1: r1= new rectangle();n聲明引用變量的同時(shí)產(chǎn)生一個(gè)對(duì)象賦給它: Rectangle r1=new Rectangle(); 引用變量r1“代表”了一個(gè)矩形對(duì)象,我們就可以使用引用變量加句點(diǎn)形式訪問對(duì)象的成員了 在Java中基本類型變量存儲(chǔ)在棧的內(nèi)存結(jié)構(gòu)中 int x=10;boolean y=true;引用型變量內(nèi)儲(chǔ)存著對(duì)象實(shí)例的地址聲明兩個(gè)矩形類引用變量r1、r2 :Rectangle r1,r2; r1、r2沒有指向任何對(duì)象實(shí)例,系統(tǒng)默認(rèn)賦初值null 產(chǎn)生一個(gè)新對(duì)象實(shí)例并賦值給r1:r1= new rect
9、angle();r2=r1; n在java中字符串類型數(shù)據(jù)是按照對(duì)象來處理的 n兩種方式 顯式和隱式創(chuàng)建nJava為了加快程序的執(zhí)行速度,把隱式創(chuàng)建的字符串對(duì)象放在棧中一個(gè)特殊區(qū)域字符串池(String Pool)中,相同內(nèi)容的字符串對(duì)象只保留一份 。String str1=new String(“Hello java!”);String str2=”Hello Java!”程序3.6 TestString.javapublic class TestString public static void main(String args) String str1=new String(Hello
10、Java!); String str2=str1; String str3=Hello Java!; String str4=Hello Java!; System.out.println(str1= =str2); System.out.println(str1= =str3); System.out.println(str3= =str4); 輸出結(jié)果:truefalsetrue3.63.6構(gòu)造方法構(gòu)造方法n構(gòu)造方法是創(chuàng)建對(duì)象時(shí)調(diào)用的特殊方法n方法名必須與要?jiǎng)?chuàng)建對(duì)象的類名相同n不允許聲明返回類型,即使聲明為void也是不正確的n如果類中并沒有定義構(gòu)造方法,Java會(huì)自動(dòng)地給你添加一個(gè)無參的
11、缺省構(gòu)造方法 n可以自定義重載的多個(gè)構(gòu)造方法,在創(chuàng)建對(duì)象時(shí)使實(shí)例多樣化。(重載)例:程序3.7 Student.java 3.7 this3.7 this關(guān)鍵字關(guān)鍵字public Student(int age ) System.out.println(Invoke constructor with age.); age=age; 以上構(gòu)造方法中出現(xiàn)age=age的奇怪語句,this關(guān)鍵字用來解決這個(gè)問題。 this引用指向的是其本身所在方法的當(dāng)前對(duì)象。以上構(gòu)造方法若采用this關(guān)鍵字則修改為:public Student(int age ) System.out.println(Invoke
12、 constructor with age.); this.age=age; this.age=age意指把參數(shù)age的值賦給類成員變量age。3.83.8初始化問題初始化問題n如果程序員使用了缺省的構(gòu)造方法并且沒有在類中初始化成員變量,創(chuàng)建對(duì)象時(shí)系統(tǒng)會(huì)對(duì)各種類型的成員變量按表3.3自動(dòng)進(jìn)行初始化賦予一個(gè)默認(rèn)值。用構(gòu)造方法完成初始化用構(gòu)造方法完成初始化n可以使用自定義的構(gòu)造方法在方法體內(nèi)初始化成員n可以在構(gòu)造方法中使用this()調(diào)用其它構(gòu)造方法以減少代碼冗余n構(gòu)造方法內(nèi)this必須在第一行n只能調(diào)用一次this()不允許調(diào)用兩次nthis()只能在構(gòu)造器中使用,其他成員方法不得調(diào)用。 cla
13、ssStudentintage;Stringname;publicStudent() System.out.println(Creatingdefaultstudent.); System.out.println(Defaultage=+age); System.out.println(Defaultname=+name);publicStudent(inta,Stringn) this(a);/必須在第一句 name=n; System.out.println(Initializestudentwithnameandage.);publicStudent(intage) this.age=a
14、ge; System.out.println(Initializestudentwithage.);publicStudent(Stringname)=name; System.out.println(Initializestudentwithname.);publicclassTestThispublicstaticvoidmain(Stringargs)Studentst1=newStudent();newStudent(24,Jacky);程序3.8TestThis.java3.9 static 3.9 static 關(guān)鍵字關(guān)鍵字n聲明為static的成員方法和變量在內(nèi)
15、存中固定只存在一份,也就是說所有類都可以共享使用的 n聲明為靜態(tài)的成員變量和成員方法在類內(nèi)部可以直接使用,在類外部可以通過類名加句點(diǎn)的方式直接訪問,而不必實(shí)例化再使用 n靜態(tài)方法內(nèi)部不能調(diào)用非靜態(tài)方法,因?yàn)殪o態(tài)方法本身是不會(huì)實(shí)例化的 ;this在靜態(tài)方法中沒有意義3.10 3.10 對(duì)象的清理對(duì)象的清理nC語言和c+是通過程序員自己定義對(duì)象的生命周期,你必須在適當(dāng)?shù)臅r(shí)候自己寫程序清除不再使用的對(duì)象空間 nJava將釋放無用內(nèi)存空間的任務(wù)交給了Java虛擬機(jī),通過垃圾回收器來回收無用對(duì)象的內(nèi)存空間n程序員無需強(qiáng)制垃圾回收器立即執(zhí)行進(jìn)行清除工作,只有當(dāng)內(nèi)存資源不夠用時(shí)垃圾回收器才開始真正回收空間
16、,所以整個(gè)程序過程中垃圾回收器可能不需要工作。什么樣的對(duì)象將被垃圾回收什么樣的對(duì)象將被垃圾回收 ?classStudentintage;Stringname;publicStudent(Stringn)name=n;publicstaticvoidp()Studentst1=newStudent(Peter);Studentst2=newStudent(Julie);st1=st2;st2=null;publicclassTestGcpublicstaticvoidmain(Stringargs)Student.p();程序3.9TestGc.java靜態(tài)方法p中首先創(chuàng)建了兩個(gè)學(xué)生Peter和
17、Julie,然后引用st1指向st2,這時(shí)st1和st2同時(shí)指向Julie,對(duì)象Peter沒有引用變量引用,所以處于待回收狀態(tài),st2賦空值后仍然有st1指向Julie所以Julie這時(shí)還不是垃圾,當(dāng)方法p()執(zhí)行完成返回main方法時(shí),局部變量st1和st2超出作用域,結(jié)束生命。內(nèi)存堆中的Peter和Julie都變成了垃圾,處于待回收狀態(tài)。處于待回收狀態(tài)只是告訴虛擬機(jī)哪些對(duì)象是垃圾,并不不知道垃圾回收器什么時(shí)候回收他們。當(dāng)內(nèi)存資源緊張時(shí),垃圾回收器會(huì)及時(shí)工作清理這些垃圾。finalizefinalize()() 在某些情況下回收垃圾對(duì)象時(shí)需要結(jié)束與這個(gè)對(duì)象相關(guān)的一些工作,比如說某個(gè)對(duì)象打開了
18、一個(gè)文件,那么清除這個(gè)對(duì)象時(shí)就需要關(guān)閉這個(gè)文件,否則這個(gè)文件在垃圾對(duì)象被回收以后就無法再編輯和關(guān)閉了finalize方法可以完成這些工作。finalize方法在垃圾回收發(fā)生之前調(diào)用,用來驗(yàn)證回收條件是否成熟,比如你的對(duì)象可能還與其他對(duì)象聯(lián)系在一起,這時(shí)在finalize方法中設(shè)定條件,阻止垃圾回收,使垃圾對(duì)象“復(fù)活”。3.113.11訪問控制修飾符訪問控制修飾符 類成員修飾符npublic 指定類成員為public時(shí),該類成員在任何類中都可以通過一個(gè)該類對(duì)象的引用來進(jìn)行訪問,當(dāng)然該類內(nèi)部可直接訪問。nprivate即聲明說這是私有的,指定成員變量或方法為private時(shí),該類成員變?yōu)榇祟惖?“
19、私有財(cái)產(chǎn)”,只能在該類中訪問。ndefualt即缺省,修飾符為隱含的package,可以在該類中訪問,也能夠在同一包中的類訪問。但在不同包中即使是其子類也無法訪問。nprotected 說明該成員是受保護(hù)的,可以在該類中訪問。同時(shí)同一包中的類也可以對(duì)其進(jìn)行訪問,不同包的子類也可以進(jìn)行訪問。 類修飾符:public、default n指定為public時(shí),可以通過import指令對(duì)該類進(jìn)行復(fù)用。如果缺省則是隱含的package訪問修飾語,這時(shí)只有在相同包里的類才能調(diào)用該類。3.123.12具體隱藏實(shí)現(xiàn)具體隱藏實(shí)現(xiàn) 具體隱藏實(shí)現(xiàn)是面向?qū)ο笤O(shè)計(jì)中一個(gè)非常重要的概念,通過使用訪問控制修飾符,把類中的無
20、須公開的數(shù)據(jù)與方法封裝起來,對(duì)外隱藏了類功能的具體實(shí)現(xiàn)過程。改變類的功能時(shí)不會(huì)影響類的使用者,并且提高了程序的安全性與可維護(hù)性。通過添加訪問器和修改器修改Rectangle類 classRectangleprivateinta,b;publicintgetArea()returna*b;publicintsetAB(inta,intb)if(a=0|b=0)System.out.println(“Erroinput!”);this.a=a;this.b=b;3.133.13參數(shù)傳遞參數(shù)傳遞nJava的參數(shù)傳遞都是值傳遞nJava參數(shù)傳遞分為基本類型參數(shù)傳遞與對(duì)象類型(即引用類型)參數(shù)傳遞。n基
21、本類型參數(shù)值傳遞意味著當(dāng)將一個(gè)實(shí)參值傳遞給一個(gè)方法時(shí),如果方法修改了該參數(shù),改變的是形參,而原始的實(shí)參的值保持不變。n引用類型變量傳遞將一個(gè)參數(shù)傳遞給一個(gè)方法后,方法接收的是一個(gè)引用變量的值,這個(gè)值某個(gè)對(duì)象的內(nèi)存地址值。引用變量的參數(shù)傳遞仍然是值傳遞。程序3.10TestPass.javaclassStudentintage;Stringname;publicStudent(inta,Stringn)age=a;name=n;publicclassTestPasspublicstaticvoidchangeAge(intfromAge,inttoAge)fromAge=toAge;System
22、.out.println(AfterinvokemethodchangeAgefromAgeis:+toAge);publicstaticvoidchangeObjAge(Studentst,inttoAge)st.age=toAge;publicstaticvoidmain(Stringargs)Studentst1=newStudent(19,Jacky);changeAge(st1.age,20);System.out.println(AfterinvokemethodchangeAgestudentageis:+st1.age);changeObjAge(st1,20);System.out.println(AfterinvokemethodchangeObjAgestudentageis:+st1.age);nchangeObjAge方法通過接受引用變量參數(shù)改變了對(duì)象的成員值,如果你從此
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年云南師范大學(xué)基礎(chǔ)教育集團(tuán)人才招聘(若干)備考考試題庫及答案解析
- 飛機(jī)模型介紹教學(xué)
- 沈陽戶外施工方案(3篇)
- 車輛信息安全分級(jí)管理制度(3篇)
- 2026年安徽廣播電視臺(tái)阜陽發(fā)射臺(tái)招聘工勤崗位1人備考考試題庫及答案解析
- 2026年度延邊州教育局所屬事業(yè)單位教師專項(xiàng)招聘(53人)筆試模擬試題及答案解析
- 飛機(jī)介紹教學(xué)課件
- 2026廣西北海市合浦縣紀(jì)委監(jiān)委招錄公益性崗位人員1人備考考試題庫及答案解析
- 2026浙江嘉興海寧智能制造崗位專場招聘備考考試題庫及答案解析
- 2025安徽銅陵市利業(yè)人才發(fā)展有限公司招聘派遣制專職財(cái)務(wù)人員(出納崗位)補(bǔ)充1人備考考試題庫及答案解析
- 中醫(yī)按摩寶典
- 任應(yīng)秋醫(yī)學(xué)叢書:瀕湖脈學(xué)白話解
- 應(yīng)收賬款賬齡分析表
- 某高樁碼頭施工組織設(shè)計(jì)
- 渦輪增壓器設(shè)計(jì)選型
- 血液透析科學(xué)飲食360
- 電子版體溫單
- 如愿二聲部合唱簡譜文檔
- YS/T 385-2006銻精礦
- JJF 1102-2003內(nèi)徑表校準(zhǔn)規(guī)范
- GB/T 5578-1985固定式發(fā)電用汽輪機(jī)技術(shù)條件
評(píng)論
0/150
提交評(píng)論