版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
lecture4成員變量的初始化、包和訪問(wèn)控制符提綱成員變量的初始化包訪問(wèn)控制類的訪問(wèn)控制符類成員的訪問(wèn)控制符成員變量的初始化簡(jiǎn)單數(shù)據(jù)類型變量的初始化復(fù)雜數(shù)據(jù)類型變量的初始化指定初值構(gòu)造函數(shù)的初始化靜態(tài)數(shù)據(jù)的初始化簡(jiǎn)單數(shù)據(jù)類型成員變量的初始化(1)classMeasurement{booleant;charc;byteb;shorts;inti;longl;floatf;doubled;簡(jiǎn)單數(shù)據(jù)類型成員變量的初始化(2)voidprint(){System.out.println("DatatypeInitialvalue\n"+"boolean"+t+"\n"+"char["+c+"]"+(int)c+"\n"+"byte"+b+"\n"+"short"+s+"\n"+"int"+i+"\n"+"long"+l+"\n"+"float"+f+"\n"+"double"+d);}}簡(jiǎn)單數(shù)據(jù)類型成員變量的初始化(3)publicclassInitialValues{publicstaticvoidmain(String[]args){Measurementd=newMeasurement();d.print();/*Inthiscaseyoucouldalsosay:newMeasurement().print();*/}}///:~
簡(jiǎn)單數(shù)據(jù)類型成員變量的初始化(4)結(jié)果:Theoutputofthisprogramis:DatatypeInitialvaluebooleanfalsechar[]0byte0short0int0long0float0.0double0.0復(fù)雜類型變量的初始化如果是復(fù)雜類型的變量,則初始化為null如:classtest{studentb;}則b初始化為null指定初值(1)簡(jiǎn)單數(shù)據(jù)類型指定初值classMeasurement{booleanb=true;charc='x';byteB=47;shorts=0xff;inti=999;longl=1;floatf=3.14f;doubled=3.14159;//...指定初值(2)復(fù)雜數(shù)據(jù)類型指定初值classMeasurement{Deptho=newDepth();booleanb=true;//...指定初值后初始化順序構(gòu)造函數(shù)可用來(lái)執(zhí)行初始化動(dòng)作,但是自動(dòng)初始化動(dòng)作和指定初值在構(gòu)造函數(shù)之前執(zhí)行classCounter{inti;Counter(){i=7;}}//...過(guò)程:初始化次序(1)classTag{Tag(intmarker){System.out.println("Tag("+marker+")");}}
初始化次序(2)classCard{Tagt1=newTag(1);//BeforeconstructorCard(){//Indicatewe'reintheconstructor:System.out.println("Card()");t3=newTag(33);//Reinitializet3}Tagt2=newTag(2);//Afterconstructorvoidf(){System.out.println("f()");}Tagt3=newTag(3);//Atend}初始化次序(3)publicclassOrderOfInitialization{publicstaticvoidmain(String[]args){Cardt=newCard();t.f();//Showsthatconstructionisdone}}///:~結(jié)果:
Tag(1)Tag(2)Tag(3)Card()Tag(33)f()靜態(tài)數(shù)據(jù)的初始化如果數(shù)據(jù)屬于基本數(shù)據(jù)類型,而又沒(méi)有加以初始化,則會(huì)設(shè)置為基本數(shù)據(jù)類型的標(biāo)準(zhǔn)初值如果數(shù)據(jù)是復(fù)雜類型,初值便為null如果想在定義時(shí)給定初值,做法跟非static數(shù)據(jù)是一樣的注意:不論產(chǎn)生多少對(duì)象,static變量都只占用一份存儲(chǔ)空間Static明確初始化Java允許你將多個(gè)static初始化動(dòng)作組織起來(lái),置于特殊的“static構(gòu)建子句(有時(shí)也稱為staticblock)”中,看起來(lái)像這樣:classSpoon{staticinti;static{i=47;}//...看起來(lái)像是個(gè)函數(shù),但其實(shí)是在關(guān)鍵字static之后緊接著函數(shù)本體。這樣的程序代碼就像其他形式的static初始化一樣,只會(huì)被執(zhí)行一次;在你首次產(chǎn)生class對(duì)象或首次訪問(wèn)該class的static成員時(shí)。
Static明確初始化示例(1)classCup{Cup(intmarker){System.out.println("Cup("+marker+")");}voidf(intmarker){System.out.println("f("+marker+")");}}
classCups{staticCupc1;staticCupc2;static{c1=newCup(1);c2=newCup(2);}Cups(){System.out.println("Cups()");}}Static明確初始化示例(2)publicclassExplicitStatic{publicstaticvoidmain(String[]args){System.out.println("Insidemain()");Cups.c1.f(99);//(1)}//staticCupsx=newCups();//(2)//staticCupsy=newCups();//(2)}///:~No-static實(shí)體初始化Java也為對(duì)象內(nèi)的non-static變量的初始化行為提供了類似語(yǔ)法。
classMug{Mug(intmarker){System.out.println("Mug("+marker+")");}voidf(intmarker){System.out.println("f("+marker+")");}}
No-static實(shí)體初始化示例(1)publicclassMugs{Mugc1;Mugc2;{c1=newMug(1);c2=newMug(2);System.out.println("c1&c2initialized");}Mugs(){System.out.println("Mugs()");}publicstaticvoidmain(String[]args){System.out.println("Insidemain()");Mugsx=newMugs();}}///:~No-static實(shí)體初始化示例(2)其中{c1=newMug(1);c2=newMug(2);System.out.println("c1&c2initialized");}可以看作實(shí)體的初始化子句初始化順序(二)當(dāng)某個(gè)型別為A的對(duì)象首次被產(chǎn)生出來(lái),或是當(dāng)classA的static函數(shù)或static數(shù)據(jù)成員被首次訪問(wèn),Java編譯器必須查找環(huán)境變量所指定的位置,找到A.class一旦A.class被裝載,它的所有static初始動(dòng)作會(huì)被執(zhí)行起來(lái)。因此static初始化動(dòng)作僅會(huì)發(fā)生一次,就是在Class對(duì)象首次被裝載時(shí)。當(dāng)你newA(),構(gòu)建過(guò)程會(huì)先為A()對(duì)象在heap上分配足夠的存儲(chǔ)空間。這塊存儲(chǔ)空間會(huì)先被清為零,并自動(dòng)將A對(duì)象內(nèi)所有隸屬基本型別的數(shù)據(jù)設(shè)為缺省值,并將復(fù)雜類型的引用設(shè)為null執(zhí)行所有出現(xiàn)數(shù)據(jù)定義處的初始化序列執(zhí)行構(gòu)造函數(shù)初始話順序(二)classBowl{Bowl(intmarker){System.out.println("Bowl("+marker+")");}voidf(intmarker){System.out.println("f("+marker+")");}}初始話順序(二)classTable{staticBowlb1=newBowl(1);Table(){System.out.println("Table()");b2.f(1);}voidf2(intmarker){System.out.println("f2("+marker+")");}staticBowlb2=newBowl(2);}初始話順序(二)classCupboard{Bowlb3=newBowl(3);staticBowlb4=newBowl(4);Cupboard(){System.out.println("Cupboard()");b4.f(2);}voidf3(intmarker){System.out.println("f3("+marker+")");}staticBowlb5=newBowl(5);}初始話順序(二)publicclassStaticInitialization{publicstaticvoidmain(String[]args){System.out.println("CreatingnewCupboard()inmain");newCupboard();System.out.println("CreatingnewCupboard()inmain");newCupboard();t2.f2(1);t3.f3(1);}staticTablet2=newTable();staticCupboardt3=newCupboard();}///:~初始話順序(二)結(jié)果:Bowl(1)Bowl(2)Table()f(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()f(2)CreatingnewCupboard()inmainBowl(3)Cupboard()f(2)CreatingnewCupboard()inmainBowl(3)Cupboard()f(2)f2(1)f3(1)Package(包)一個(gè)包就是一些提供訪問(wèn)保護(hù)和命名空間管理的相關(guān)類與接口的集合使用包的目的就是使類容易查找使用包的作用命名空間的管理防止類名的沖突訪問(wèn)控制privatepublicpackageprotected包的創(chuàng)建格式:packagepkg1[.pkg2[.pkg3]];包名獨(dú)一無(wú)二將Internet域名反寫作為包的名稱將包的名稱分解為機(jī)器的目錄結(jié)構(gòu)必須放在一個(gè)Java文件的第一句import語(yǔ)句格式:importpkg1[.pkg2].(<classname>|*);例子importjava.util.Date;importjava.io.*;注意:使用的類或包必須加載程序中使用‘*’將會(huì)延長(zhǎng)編譯時(shí)間,但不會(huì)影響類的大小和性能包的使用用包的全名來(lái)引用包中的類,要求在類名前加上包的全名。例如:java.lang.refrect.Array.getByte(nameArray,5);用import語(yǔ)句導(dǎo)入包importjava.io.*;用import導(dǎo)入包import包名;例如:importjava.lang.refrect;若要使用包中的類,可用refrect.類名import包名.類名;例如:java.lang.refrect.Array這樣,在程序中就可直接引用Arrayimport包名.*;例如:java.lang.refrect.*;它引入了包的所有類,這種方式最常用包對(duì)文件的管理在沒(méi)有package語(yǔ)句的源文件中,一個(gè)文件中的所有類都放在默認(rèn)的無(wú)名包中,它對(duì)應(yīng)于當(dāng)前的目錄當(dāng)有包語(yǔ)句的情況下,解釋器按照文件系統(tǒng)的層次結(jié)構(gòu)查找類,所以字節(jié)碼文件所在目錄名應(yīng)與其中的類所在的包名對(duì)應(yīng)包對(duì)文件的管理說(shuō)明.njtu.graphicsclassCircle{………}
classTriangle{………}包對(duì)應(yīng)的字節(jié)碼文件cnedunjtugraphicsCircle.classTriangle.class創(chuàng)建包路徑格式j(luò)avac–d包路徑根目錄源文件例子假設(shè)在d:\test\source目錄下有一個(gè)TestPackage.java文件,定義如下:packageaa.bb.cc;publicclassTestPackage{………}假設(shè)想要將編后的字節(jié)碼文件放到d:\test\classes目錄下,則可以使用下列命令:javac–dd:\test\classesd:\test\source\TestPackage.java創(chuàng)建包路徑若當(dāng)前在d:\test\source目錄下,則可以使用下列命令將當(dāng)前目錄作為包路徑的根目錄:javac–d.TestPackage.java其中”.”表示當(dāng)前目錄編譯后在d:\test\source\aa\bb\cc\目錄下存放TestPackage.class文件編譯器、解釋器尋找類首先找出環(huán)境變量CLASSPATH,CLASSPATH含有一個(gè)或多個(gè)目錄,每個(gè)目錄作為.class的文件的查找起點(diǎn)Java會(huì)從這個(gè)起點(diǎn)開始,并將package名稱中的每個(gè)“.”號(hào)替換為斜線以獲得在CLASSPATH起點(diǎn)下的路徑名稱得出的路徑會(huì)接續(xù)于CLASSPATH的各個(gè)目錄下這些路徑名稱便是直譯器查找你所產(chǎn)生.class的起點(diǎn)例子環(huán)境變量classpah的設(shè)置有以下兩種方式。(1)設(shè)置環(huán)境變量CLASSPAHTsetclasspath=.;d:\test\classes(2)
用-classpath選項(xiàng)指明java–classpathd:\test\classesaa.bb.cc.TestPackage編譯器和解釋器可以在classpath指定的路徑中搜索到類。上面的例子中解釋器會(huì)根據(jù)路徑d:\test\classes和包名aa.bb.cc構(gòu)造出d:\test\classes\aa\bb\cc路徑找TestPackage.class字節(jié)碼文件。
訪問(wèn)控制類的訪問(wèn)控制一個(gè)獨(dú)立的類稱為外部類,嵌在類內(nèi)部的類稱為內(nèi)部類。所說(shuō)的類一般指外部類。類可以用公有、友好修飾;不能用保護(hù)、私有(編譯不過(guò))。每個(gè)編譯單元(文件)可以有多個(gè)類,但只能有一個(gè)是公有的,其它都是友好的。公有類名與文件名完全相同。一般設(shè)計(jì)成一個(gè)文件只包含一個(gè)類??赡芤粋€(gè)文件不含公有類,此時(shí)類名可以任意。修飾一個(gè)公有類的成員變量和成員函數(shù)同一包其它類,可訪問(wèn)該類公有、保護(hù)、友好的成員。不同包其它類(不包括子類),僅能訪問(wèn)該類公有成員。同一包的子類,繼承父類公有、保護(hù)、友好的成員。訪問(wèn)父類公有、保護(hù)、友好的成員。繼承和訪問(wèn)的一樣多。不同包的子類,繼承父類公有、保護(hù)的成員,不能繼承友好成員。訪問(wèn)父類公有成員。繼承的多于訪問(wèn)的??稍L問(wèn)(本類聲明對(duì)象)publicprotecteddefaultprivate1.同一個(gè)類yyyy2.同一個(gè)包其它類(包括子類)yyyn3.不同包其它類(不包括子類)ynnn可繼承(子類聲明對(duì)象)publicprotecteddefaultprivate1.同一包子類,可繼承yyyn2.不同包子類,可繼承yynn
public
—所有類都能訪問(wèn)—可以被子類繼承—公共的接口
private
—本類可訪問(wèn)
protected
—同一包的所有類可訪問(wèn);所有子類都可繼承。
package:—同一包的所有類可訪問(wèn);同一包子類可繼承。訪問(wèn)控制符總結(jié)publicpackageGreek;publicclassAlpha{
publicintiampublic;
publicvoidpublicMethod(){System.out.println("publicMethod");}}packageRoman;importGreek.*;classBeta{voidaccessMethod(){Alphaa=newAlpha();
a.iampublic=10;//?
a.publicMethod();//?}}返回privateclassAlpha{
privateintiamprivate;
privatevoidprivateMethod(){System.out.println("privateMethod");}}classBeta{
voidaccessMethod(){Alphaa=newAlpha();
a.iamprivate=10;//?
a.privateMethod();//?}}返回protectedpackageGreek;classAlpha{
protectedintiamprotected;
protectedvoid
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版出租車投資入股及品牌拓展合同3篇
- 二零二五年建筑工程安全施工協(xié)議書范本3篇
- 2024甲乙雙方就新產(chǎn)品研發(fā)項(xiàng)目所簽訂的技術(shù)秘密保護(hù)合同
- 2024版合作社商用物業(yè)租賃協(xié)議范本版B版
- 二零二五年能源公司股份代持與能源項(xiàng)目合作協(xié)議3篇
- 2024遼寧事業(yè)單位聘用合同書
- 2024版場(chǎng)地租賃協(xié)議書模板
- 二零二五年道路運(yùn)輸安全生產(chǎn)責(zé)任合同3篇
- 二零二五年文化場(chǎng)館建設(shè)項(xiàng)目勞務(wù)分包合同3篇
- 二零二五版二手房交易傭金及稅費(fèi)代理合同3篇
- 《小學(xué)數(shù)學(xué)課堂教學(xué)中創(chuàng)設(shè)情境的實(shí)踐研究》開題報(bào)告
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- 納米復(fù)合材料的增韌增能機(jī)制
- 圖書館前臺(tái)接待工作總結(jié)
- 衛(wèi)生院藥品管理制度
- 神經(jīng)外科進(jìn)修匯報(bào)課件
- 2024老年人靜脈血栓栓塞癥防治中國(guó)專家共識(shí)(完整版)
- 騰訊營(yíng)銷師認(rèn)證考試題庫(kù)(附答案)
- 鄰近鐵路營(yíng)業(yè)線施工安全監(jiān)測(cè)技術(shù)規(guī)程 (TB 10314-2021)
- 四年級(jí)上冊(cè)脫式計(jì)算100題及答案
評(píng)論
0/150
提交評(píng)論