版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
J2EE及JAVA程序設(shè)計(jì)第三章JAVA面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)補(bǔ)充主要內(nèi)容3.3面向?qū)ο笕筇攸c(diǎn)3.4類(lèi)的定義—方法重載3.5包package3.6final、this及其它3.3面向?qū)ο缶幊痰母拍?/p>
面向?qū)ο蟮娜筇攸c(diǎn):封裝、繼承、多態(tài)
1)封裝
封裝就是把對(duì)象的屬性和對(duì)這些屬性的操作封裝在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),包含兩個(gè)含義:把對(duì)象的全部屬性和對(duì)屬性的全部操作結(jié)合在一起,形成不可分割的獨(dú)立單元(即對(duì)象)。信息隱蔽,即盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界〔或者說(shuō)形成一道屏障〕,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。2)繼承繼承是一種由已有的類(lèi)創(chuàng)建新類(lèi)的機(jī)制。利用繼承,我們可以先創(chuàng)建一個(gè)擁有共有屬性的一般類(lèi),根據(jù)該一般類(lèi)再創(chuàng)建具有特殊屬性的新類(lèi),新類(lèi)繼承一般類(lèi)的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。由繼承而得到的類(lèi)稱(chēng)為子類(lèi),被繼承的類(lèi)稱(chēng)為父類(lèi)或超類(lèi)。Java不支持多重繼承,子類(lèi)只能有一個(gè)父類(lèi)。在Java編程語(yǔ)言中,通過(guò)繼承可利用已有的類(lèi),并擴(kuò)展它的屬性和方法。這個(gè)已有的類(lèi)可以是語(yǔ)言本身提供的、其他程序員編寫(xiě)的或程序員原來(lái)編寫(xiě)的。繼承在Java中無(wú)所不在。3)多態(tài)
對(duì)象的多態(tài)是由封裝和繼承引出的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的另一特征。主要體現(xiàn)在兩個(gè)方面:方法重載時(shí)實(shí)現(xiàn)的靜態(tài)多態(tài)和方法重載時(shí)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)。多態(tài)性使得我們的同一方法,可以有多種形式。另外父類(lèi)中定義的屬性或方法被子類(lèi)繼承之后,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為,同一個(gè)屬性或方法在父類(lèi)及其各個(gè)子類(lèi)中可以具有不同的語(yǔ)義。3.4類(lèi)的定義—方法重載
方法重載(MethodOverloading)就是一個(gè)類(lèi)中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同,或者是返回值不同。這也是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的奇妙之處,重載反映了大千世界的變化。從另外的含義上來(lái)講,重載也可以看成是同一個(gè)方法具有不同的版本,每個(gè)版本之間在參數(shù)特征和返回值方面有差別。重載是Java實(shí)現(xiàn)多態(tài)性的一種方式。當(dāng)調(diào)用一個(gè)重載方法時(shí),JVM自動(dòng)根據(jù)當(dāng)前對(duì)方法的調(diào)用形式在類(lèi)的定義中匹配形式符合的成員方法,匹配成功后,執(zhí)行參數(shù)類(lèi)型、數(shù)量均相同的成員方法。方法重載在Java的API類(lèi)庫(kù)中得到大量的使用?!纠筷P(guān)于成員方法重載的例子//DemoOverload.javaclassDemo2{inta,b;intmethod(){//成員方法一
returna+b;}intmethod(intc){//成員方法二
returna+b+c;}intmethod(intc,intd){//成員方法三
returna+b+c+d;}Demo2(inta,intb){//構(gòu)造方法
this.a=a;this.b=b;}}【例】關(guān)于成員方法重載的例子publicclassDemoOverload{ publicstaticvoidmain(Stringargs[]){Demo2aDemo2=newDemo2(1,2);//實(shí)例化
inta=aDemo2.method();//調(diào)用成員方法一
System.out.println(a);intb=aDemo2.method(3);//調(diào)用成員方法二
System.out.println(b);intc=aDemo2.method(3,4);//調(diào)用成員方法三
System.out.println(c); }}上面程序的運(yùn)行結(jié)果為:3610【例】構(gòu)造方法重載,//ConstructionOverload.javaclassDemo{inta,b,c;//成員變量
publicDemo(){}//構(gòu)造方法1
publicDemo(inta){//構(gòu)造方法2 this.a=a;}publicDemo(inta,intb){//構(gòu)造方法3 this.a=a; this.b=b; }publicDemo(inta,intb,intc){//構(gòu)造方法4 this.a=a; this.b=b; this.c=c; }}publicclassConstructionOverload{ publicstaticvoidmain(Stringargs[]){//應(yīng)用第一種構(gòu)造方法
DemoaDemo=newDemo();System.out.println("方法一成員變量a:"+aDemo.a);System.out.println("方法一成員變量b:"+aDemo.b);System.out.println("方法一成員變量c:"+aDemo.c);//應(yīng)用第二種構(gòu)造方法
DemobDemo=newDemo(1);System.out.println("方法二成員變量a:"+bDemo.a);System.out.println("方法二成員變量b:"+bDemo.b);System.out.println("方法二成員變量c:"+bDemo.c);……
從上面的程序中可以看到構(gòu)造方法的重載。在該程序中,方法Demo()被定義了四次,每次參數(shù)不同。第一個(gè)構(gòu)造方法,沒(méi)有參數(shù),也沒(méi)有方法體,它和系統(tǒng)的缺省構(gòu)造方法是一致的。缺省的構(gòu)造方法確保每個(gè)Java類(lèi)都至少有一個(gè)構(gòu)造方法。如果程序中給出了帶參數(shù)的構(gòu)造方法,而沒(méi)有給出缺省構(gòu)造方法,這時(shí)調(diào)用缺省構(gòu)造方法將導(dǎo)致錯(cuò)誤。在調(diào)用構(gòu)造方法時(shí),由于使用的是同一方法名,因此根據(jù)構(gòu)造方法的參數(shù)就能找到需要運(yùn)行的哪個(gè)方法。3.5包package1package語(yǔ)句2import語(yǔ)句由于Java編譯器為每個(gè)類(lèi)生成一個(gè)字節(jié)碼文件,且文件名與類(lèi)名相同,因此同名的類(lèi)有可能發(fā)生沖突。為了解決這一問(wèn)題,Java提供包來(lái)管理類(lèi)名空間。包實(shí)際上提供了一種命名機(jī)制和可見(jiàn)性限制機(jī)制。Java虛擬機(jī)(JVM)決定如何創(chuàng)建和存儲(chǔ)包、子包以及相應(yīng)的編譯單元,并決定哪些頂層包名稱(chēng)在特定的編譯中是可見(jiàn)的,以及決定哪些包是可訪(fǎng)問(wèn)的。包可以存儲(chǔ)在在當(dāng)?shù)匚募到y(tǒng)中、分布式文件系統(tǒng)當(dāng)中,或者某種形式的數(shù)據(jù)庫(kù)中。Java系統(tǒng)必須支持至少一個(gè)無(wú)名包(也叫缺省包),一般為當(dāng)前目錄。在開(kāi)發(fā)小的或者臨時(shí)的應(yīng)用程序或者剛剛開(kāi)始開(kāi)發(fā)時(shí),用無(wú)名包是非常方便的。package語(yǔ)句package語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該文件中定義的類(lèi)所在的包。(若缺省該語(yǔ)句,則指定為無(wú)名包)。它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄。例如:名為myPackage的包中,所有類(lèi)文件都將存儲(chǔ)在目錄myPackage下。同時(shí),package語(yǔ)句中,用“.”來(lái)指明目錄的層次,例如:
packagejava.awt.image;
package;packagemyPackage;
另外,包層次的根目錄path是由環(huán)境變量classpath來(lái)確定的。Java的JDK提供的包(也叫基礎(chǔ)類(lèi)庫(kù))包括:
Java.applet、java.awt、java.awt.datatransfer、java.awt.event、java.awt.image、java.beans、java.io、java.lang、java.lang.reflect、java.math、、java.rmi、java.security、java.sql、java.util等。每個(gè)包中都包含了許多有用的類(lèi)和接口。用戶(hù)也可以定義自己的包來(lái)實(shí)現(xiàn)自己的應(yīng)用程序。Java的基礎(chǔ)類(lèi)庫(kù)其實(shí)就是JDK安裝目錄下面jre\lib\rt.jar這個(gè)壓縮文件。學(xué)習(xí)基礎(chǔ)類(lèi)庫(kù)就是學(xué)習(xí)rt.jar。基礎(chǔ)類(lèi)庫(kù)里面的類(lèi)非常非常多。但是真正對(duì)于我們來(lái)說(shuō)最核心的只有幾個(gè),例如java.lang.*;java.io.*;java.util.*;java.sql.*;等。import語(yǔ)句
為了能使用Java中已提供的類(lèi),我們需要用import語(yǔ)句來(lái)引入所需要的類(lèi)。其格式為
importpackage1[.package2…].(classname|*);import語(yǔ)句其中package1[.package2…]表明包的層次,與package語(yǔ)句相同,它對(duì)應(yīng)于文件目錄,classname則指明所要引入的類(lèi),如果要從一個(gè)包中引入多個(gè)類(lèi),則可以用星號(hào)(*)來(lái)代替。例如:
importjava.util.Date;
importjava.util.*;
importjavax.swing.event.*;
為了能使用Java中已提供的類(lèi),我們需要用import語(yǔ)句來(lái)引入所需要的類(lèi)。其格式為
importpackage1[.package2…].(classname|*);import語(yǔ)句其中package1[.package2…]表明包的層次,與package語(yǔ)句相同,它對(duì)應(yīng)于文件目錄,classname則指明所要引入的類(lèi),如果要從一個(gè)包中引入多個(gè)類(lèi),則可以用星號(hào)(*)來(lái)代替。例如:
importjava.util.Date;
importjava.util.*;
importjavax.swing.event.*;3.6final、this及其它1final關(guān)鍵字2this引用3super關(guān)鍵字4null關(guān)鍵字5java.lang.Object類(lèi)介紹6遞歸方法7命令行參數(shù)的輸入8JAR文件的使用this引用關(guān)鍵字this是用來(lái)指向當(dāng)前對(duì)象或類(lèi)實(shí)例的。例如:
publicclassMyDate{privateintday,month,year;publicvoidtomorrow(){this.day=this.day+1;}}這里,this.day指的是當(dāng)前對(duì)象的day字段。或者在成員方法定義時(shí),我們使用的形式參數(shù)與成員變量名稱(chēng)相同,這時(shí)我們要用到this。例如:classDemothis{inta;//成員變量
publicDemo(inta){ this.a=a;}}super關(guān)鍵字super關(guān)鍵字指明是對(duì)父類(lèi)的引用。關(guān)于super可以參考后續(xù)章中關(guān)于繼承的章節(jié)。null關(guān)鍵字
在Java語(yǔ)言規(guī)范中,null表示類(lèi)或者變量是空,不代表任何對(duì)象或?qū)嵗?。看下面的例?/p>
SomeClassaSomeClass=null;上面的語(yǔ)句中,只定義了類(lèi)SomeClass的實(shí)例aSomeClass,但并沒(méi)有為之創(chuàng)建任何對(duì)象。java.lang.Object類(lèi)介紹類(lèi)java.lang.Object處于java開(kāi)發(fā)環(huán)境的類(lèi)層次的根部,其它所有的類(lèi)都是直接或間接地繼承了此類(lèi)。該類(lèi)定義了一些最基本的狀態(tài)和行為。下面,我們介紹一些常用的方法java.lang.Object類(lèi)介紹
instanceof運(yùn)算符:
instanceof運(yùn)算符是一個(gè)常用的運(yùn)算符,該運(yùn)算符是雙目運(yùn)算符,左面的操作元是一個(gè)對(duì)象,右面是一個(gè)類(lèi)。當(dāng)左面的對(duì)象是右面的類(lèi)創(chuàng)建的對(duì)象時(shí),該運(yùn)算符運(yùn)算的結(jié)果是true,否則是false。例如:if(b1instanceofButton)doDealB1();其中b1是對(duì)象,Button是一個(gè)類(lèi)名。
【例】getClass和Instanceof方法的使用//ClassAndInstance.javaclassSubClass{}classSuperClassextendsSubClass{}publicclassClassAndInstance{publicstaticvoidmain(String[]args){test(newSubClass());test(newSuperClass());}staticvoidtest(Objectx){System.out.println("Testingxoftype"+x.getClass());System.out.println("xinstanceofSubClass"+(xinstanceofSubClass));System.out.println("xinstanceofSuperClass"+(xinstanceofSuperClass));}}程序運(yùn)行結(jié)果:如下:TestingxoftypeclassSubClassxinstanceofSubClasstruexinstanceofSuperClassfalseTestingxoftypeclassSuperClassxinstanceofSubClasstruexinstanceofSuperClasstrue命令行參數(shù)的輸入在C程序中main()作為一個(gè)程序的入口方法,在Java中也同樣利用這個(gè)方法來(lái)啟動(dòng)一個(gè)Java程序。main()使用一個(gè)字符串?dāng)?shù)組作為參數(shù),它表示啟動(dòng)Java這個(gè)程序時(shí)的命令行參數(shù),在下面的例子中我們展現(xiàn)了如何使用main的這個(gè)參數(shù)?!纠繌拿钚休斎?yún)?shù)//MainArgument.javapublicclassMainArgument{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.println(“Argumnet[”+i+”]:”+args[i]);}}程序運(yùn)行結(jié)果:
D:\user\chap03>javaMainArgumentOneTwoArgumnet[0]:OneArgumnet[1]:TwoJAR文件的使用
JAR文件就是JavaArchiveFile,是Java的一種文檔格式。JAR文件非常類(lèi)似ZIP文件,準(zhǔn)確的說(shuō),它就是ZIP文件,所以可以叫它文件包。JAR文件與ZIP文件唯一的區(qū)別就是在JAR文件的內(nèi)容中,包含了一個(gè)META-INF/MANIFEST.MF文件,這個(gè)文件是在生成JAR文件的時(shí)候自動(dòng)創(chuàng)建的??梢允褂胘ar.exe把一些文件壓縮成一個(gè)JAR文件,來(lái)發(fā)布我們的應(yīng)用程序。jar.exe是隨JDK安裝的,在JDK安裝目錄下的bin子目錄中,文件名為jar.exe。我們可以把java應(yīng)用程序中涉及到的類(lèi)壓縮成一個(gè)JAR文件,比如Tom.jar,然后使用java解釋器使用參數(shù)-jar執(zhí)行這個(gè)壓縮文件,如下格式j(luò)ava-jarTom.jar或用鼠標(biāo)雙擊該文件,就可執(zhí)行這個(gè)壓縮文件JAR文件的制作步驟如下:首先,假設(shè)應(yīng)用程序中有兩個(gè)類(lèi)A、B,其中A類(lèi)是主類(lèi)(其中包含了main()方法).1)首先用文本編輯器比如Windows下的記事本編寫(xiě)一個(gè)清單文件Mymoon.mfManifest-Version:1.0Main-Class:ACreated-By:1.2.2(SunMicrosystemsInc.)比如,保存Mymoon.mf到D:\user\chap03.需要注意的是在編寫(xiě)清單文件時(shí),在”Manifest-Version”和“1.0”之間,”Main-Class”和主類(lèi)”A”之間
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度私人車(chē)輛抵押小額快速借款合同
- 二零二五年度泳池設(shè)施租賃免責(zé)合同
- 二零二五年度院子使用權(quán)轉(zhuǎn)讓合同樣本
- 2025版二手房買(mǎi)賣(mài)居間服務(wù)與裝修保修期合同正本4篇
- 2025年度高端定制旅游服務(wù)合同范本12篇
- 二零二五年度環(huán)氧地坪施工與室內(nèi)空氣凈化合同
- 2025年度演員經(jīng)紀(jì)代理協(xié)議-經(jīng)紀(jì)公司獨(dú)家代理合同
- 二零二五年度電機(jī)產(chǎn)品售后保障合同
- 2025年度旅游特色小鎮(zhèn)營(yíng)業(yè)場(chǎng)所租賃合同
- 2025年度抵押貸款購(gòu)房合同貸款合同續(xù)簽與展期合同
- 食品企業(yè)質(zhì)檢員聘用合同
- 中醫(yī)診所內(nèi)外部審計(jì)制度
- 自然辯證法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年國(guó)家危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)考試題庫(kù)(含答案)
- 護(hù)理員技能培訓(xùn)課件
- 家庭年度盤(pán)點(diǎn)模板
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題集錦(頻考類(lèi)試題)帶答案
- 試卷中國(guó)電子學(xué)會(huì)青少年軟件編程等級(jí)考試標(biāo)準(zhǔn)python三級(jí)練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報(bào)告
- 飼料廠(chǎng)現(xiàn)場(chǎng)管理類(lèi)隱患排查治理清單
評(píng)論
0/150
提交評(píng)論