Andriod課件-2-C-程序員Java速成_第1頁(yè)
Andriod課件-2-C-程序員Java速成_第2頁(yè)
Andriod課件-2-C-程序員Java速成_第3頁(yè)
Andriod課件-2-C-程序員Java速成_第4頁(yè)
Andriod課件-2-C-程序員Java速成_第5頁(yè)
已閱讀5頁(yè),還剩241頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C++程序員Java速成北京大學(xué)信息學(xué)院郭煒C++程序員Java速成北京大學(xué)信息學(xué)院郭煒一、程序結(jié)構(gòu)

一個(gè)Java程序可以由多個(gè).java文件組成,必須有且只有一個(gè)類,含有publicstaticvoidmain(Stringargs[])

成員函數(shù),Java程序從這個(gè)函數(shù)開始執(zhí)行publicclassHelloWorld{

publicstaticvoidmain(Stringargs[]){ System.out.println("Hello,World"); }}一、程序結(jié)構(gòu)

一個(gè)Java程序可以由多個(gè).java文件組成一、程序結(jié)構(gòu)

2.程序存在.java文件中。一個(gè).java文件里可以有多個(gè)class,但是只能有一個(gè)class是public的。.java文件里可以沒有類是public的。包含main的那個(gè)類也可以不是public的。3..java文件里如果有public的class,那么文件名必須和該類名一致(大小寫相關(guān))。如果沒有public類,那么文件名也必須和其中某個(gè)類(隨便哪個(gè)都行)相同。一、程序結(jié)構(gòu)

4.Java程序大小寫相關(guān),甚至文件名都是大小寫相關(guān)的。5..java文件的編碼必須是ANSI的.6.Java程序中的每個(gè)類,經(jīng)過編譯后會(huì)變成一個(gè).class文件,文件名和類名相同。7.a.java中如果用到了文件b.java中的類,那么不做特殊處理的話,程序運(yùn)行時(shí),應(yīng)確保a.class應(yīng)該和b.class在同一個(gè)文件夾下。8.Java沒有全局變量和全局函數(shù)。所有東西都寫在class里面。一、程序結(jié)構(gòu)

4.Java程序大小寫相關(guān),甚至文件名都是大小寫相關(guān)的。一java有boolean數(shù)據(jù)類型,沒有bool類型。 boolean類型的取值是true或false。boolean和int類型不能互相轉(zhuǎn)換。條件表達(dá)式必須是boolean類型的,不能把0當(dāng)false,非0當(dāng)true2.有byte數(shù)據(jù)類型,byte類型的變量占一個(gè)字節(jié),取值是-128–127。3.float常量后面要加'f'或'F',如:floaty=0.3f,x=1.3e-4f;二、數(shù)據(jù)類型java有boolean數(shù)據(jù)類型,沒有bool類型。二、數(shù)據(jù)char類型的變量可以是Unicode字符表中的字符,包括可以是漢字,如:

charc=‘好’; char類型變量里,存放的是字符在unicode編碼里的序號(hào)。Unicode編碼一共65535個(gè)字符。字母、數(shù)字和普通標(biāo)點(diǎn)符號(hào)在unicode里的編號(hào)正好和其ASCII碼相等。不能認(rèn)為char類型的變量占一個(gè)字節(jié)。二、數(shù)據(jù)類型二、數(shù)據(jù)類型

5.long類型的變量占8個(gè)字節(jié)。long類型的常量后面要跟'L'或'l',如:longa=0xffffffffffaL;6.將精度高的數(shù)值賦值給精度低的變量時(shí),必須要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,不過char類型和int類型可以互相賦值,只要賦給char類型的int值不超過65535;二、數(shù)據(jù)類型

5.long類型的變量占8個(gè)字節(jié)。long類型的常量后面publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ floaty=0.3f,x=1.3e-4f; charc='好'; longa=0xffffffffffL; System.out.println(c); System.out.println(a); System.out.println((int)'好'); System.out.println((char)22900); System.out.println((int)'a'); //intn=3.232;//wrong charc1=65535;//ok //charc2=65536;//wrong }}輸出:好109951162777522909奴97publicclassHelloWorld{輸出:成員變量被稱為“屬性”,成員函數(shù)被稱為“方法Java中沒有指針,但Java對(duì)象本質(zhì)上只是相當(dāng)于C++中的指針,必須通過new運(yùn)算符創(chuàng)建后才能被使用。classTest{ intn;}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Testt;

//本質(zhì)上相當(dāng)于C++的Test*t; t.n=100;//錯(cuò),t還沒有初始化,對(duì)象不存在}三、對(duì)象的概念成員變量被稱為“屬性”,成員函數(shù)被稱為“方法三、對(duì)象的概念正確的寫法:classTest{ intn;}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Testt; t=newTest(); t.n=100; }}三、對(duì)象的概念正確的寫法:三、對(duì)象的概念Java中對(duì)象用new創(chuàng)建后,不需要delete。Java虛擬機(jī)有垃圾回收機(jī)制,定期自動(dòng)回收沒用的對(duì)象。4.對(duì)象間互相賦值會(huì)使得兩個(gè)對(duì)象指向(或說是引用)相同的地方三、對(duì)象的概念classA{inti;}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Aa1=newA(),a2=newA(); a1.i=10;a2.i=20; a1=a2;a1.i=30; System.out.println(a2.i); }}輸出:30Java中對(duì)象用new創(chuàng)建后,不需要delete。JavaJava中的數(shù)組都是對(duì)象,有許多屬性和方法。比如length屬性表示數(shù)組元素個(gè)數(shù)。一維數(shù)組的兩種定義方式(無(wú)區(qū)別):

類型數(shù)組名[];

類型[]數(shù)組名;

不能在[]中指定元素個(gè)數(shù)

四、數(shù)組Java中的數(shù)組都是對(duì)象,有許多屬性和方法。比如lengt數(shù)組定義后并不占有內(nèi)存,也必須用new運(yùn)算符創(chuàng)建后才能使用。創(chuàng)建時(shí)指定元素個(gè)數(shù)。 floatgpa[]; gpa=newfloat[300];//300個(gè)元素

也可以定義時(shí)直接初始化:floatgpa[]=newfloat[4];inta[]={1,2,3,4,5};System.out.println(a.length); //輸出5四、數(shù)組數(shù)組定義后并不占有內(nèi)存,也必須用new運(yùn)算符創(chuàng)建后才能使用。一維對(duì)象數(shù)組初始化:classStudent{ intn; Student(intv){n=v;};}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ StudentaStudent[]={newStudent(3),newStudent(2),newStudent(4)}; }}四、數(shù)組一維對(duì)象數(shù)組初始化:四、數(shù)組數(shù)組new后,每個(gè)元素都是null,每個(gè)元素都需要new后才能使用classDemo{ intn;}voidArrayDemo(){ Demo[]a=newDemo[10]; a[1].n=5;

//上面會(huì)引發(fā)

java.lang.NullPointerException錯(cuò)誤 a[1]=newDemo(); a[1].n=5;}四、數(shù)組數(shù)組new后,每個(gè)元素都是null,每個(gè)元素都需要new后才4.二維數(shù)組的每一行都可以分別初始化,而且每一行的元素個(gè)數(shù)可以不一樣。二維數(shù)組的length屬性代表其行數(shù),也就是其中一維數(shù)組的個(gè)數(shù)。四、數(shù)組 inta[][]={{1,2,3},{2,3},{4,5}}; System.out.println(a.length);//輸出3 System.out.println(a[0].length);//輸出3 System.out.println(a[1].length);//輸出24.二維數(shù)組的每一行都可以分別初始化,而且每一行的元素個(gè)數(shù)5.二維數(shù)組的其他初始化方式:

四、數(shù)組publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){ intb[][],c[][]; b=newint[4][5];c=newint[4][]; c[0]=newint[3]; c[1]=newint[100]; System.out.println(c.length); //輸出4 System.out.println(c[0].length);//輸出3 System.out.println(c[1].length);//輸出100 System.out.println(c[2].length);//運(yùn)行時(shí)導(dǎo)致java.lang.NullPointerException錯(cuò)誤

}}5.二維數(shù)組的其他初始化方式:四、數(shù)組publiccla6.數(shù)組是對(duì)象,本質(zhì)是指針。同類型數(shù)組之間可以互相賦值。importjava.util.Arrays;//類似于C++的#incudepublicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ chara[]={'h','e','k'}; charb[]={'1','2','3','4'}; a=b;//a和b指向(或稱引用)同一個(gè)數(shù)組,a原來指向的數(shù)組被垃圾回收

System.out.println(a.length); a[0]='a';//b[0]也變成'a' Strings=Arrays.toString(b); System.out.println(s); }//Arrays是Java標(biāo)準(zhǔn)類,能將數(shù)組轉(zhuǎn)換成字符串}

四、數(shù)組輸出:4[a,2,3,4]6.數(shù)組是對(duì)象,本質(zhì)是指針。同類型數(shù)組之間可以互相賦值。四7.Arrays是Java標(biāo)準(zhǔn)類,能將數(shù)組轉(zhuǎn)換成字符串importjava.util.Arrays;//類似于C++的#incudepublicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ inta[]={12,34,29}; System.out.println(Arrays.toString(a));

}}

四、數(shù)組輸出:[12,34,29]7.Arrays是Java標(biāo)準(zhǔn)類,能將數(shù)組轉(zhuǎn)換成字符串四、8.關(guān)于char數(shù)組char類型的的數(shù)組可以直接用println輸出其全部?jī)?nèi)容chara[]={'a','b','c'};System.out.println(a);//輸出abcchar類型的數(shù)組不能如下初始化:

chara[]="this";四、數(shù)組8.關(guān)于char數(shù)組四、數(shù)組9.拷貝數(shù)組System.arraycopy(srcArray,intidx1,destArray,intidx2,intlen)將srcArray從下標(biāo)idx1開始的len個(gè)元素拷貝到destArray從下標(biāo)idx2開始的地方。destArray必須足夠大。Arrays.copyOfRange(someArray,intfrom,intto)將someArray從from開始到to-1的元素復(fù)制到一個(gè)新數(shù)組中并且返回。四、數(shù)組9.拷貝數(shù)組四、數(shù)組importjava.util.Arrays;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4}; intb[]={5,6,7,8,9}; System.arraycopy(b,0,a,1,2); System.out.println(Arrays.toString(a)); intc[]=Arrays.copyOf(b,3); System.out.println(Arrays.toString(c)); intd[]=Arrays.copyOfRange(b,1,4); System.out.println(Arrays.toString(d)); inte[]=Arrays.copyOfRange(b,1,9); System.out.println(Arrays.toString(e)); }}四、數(shù)組[1,5,6,4][5,6,7][6,7,8][6,7,8,9,0,0,0,0]輸出:importjava.util.Arrays;四、數(shù)組[1四、數(shù)組10.遍歷數(shù)組:除了和C++一樣的遍歷方式外,還有如下方式publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4}; intn=0; for(intk:a) n+=k; System.out.println(n); charb[]={'a','b','c'}; for(charch:b) System.out.print(ch); }}10abc輸出:四、數(shù)組10.遍歷數(shù)組:10輸出:importjava.util.Arrays;enumSeason{Spring,Summer,Autum,winter}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Seasonx; x=Season.Spring; System.out.println(x); }}輸出:Spring五、枚舉類型importjava.util.Arrays;五、枚舉類型六、類所有成員函數(shù)的函數(shù)體都寫在class{ ….

}//此處不需要‘;’

里面,不能拿出來寫。

2.成員變量可以是本類的對(duì)象(因?qū)ο蟊举|(zhì)是指針)classLinklistNode{ intn; LinklistNodenext;}六、類所有成員函數(shù)的函數(shù)體都寫在六、類3.靜態(tài)屬性稱為“類變量”,非靜態(tài)屬性稱為“實(shí)例變量”。靜態(tài)方法稱為“類方法”,非靜態(tài)方法稱為“實(shí)例方法”。4.同樣存在“this指針”,當(dāng)然在Java里不叫指針。在類的方法內(nèi)可以通過“this.成員名”的方式訪問成員。總之,C++中的“->”和“::”在Java里都是“.”六、類3.靜態(tài)屬性稱為“類變量”,非靜態(tài)屬性稱為“實(shí)例變六、類寫類定義時(shí),可以對(duì)屬性進(jìn)行初始化。classTest{ intn=4; doublef=1.3f;}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Testt=newTest(); System.out.println(t.n); System.out.println(t.f); }}41.2999999523162842輸出:六、類寫類定義時(shí),可以對(duì)屬性進(jìn)行初始化。4輸出:六、類7.構(gòu)造方法沒有初始化列表。要調(diào)用基類的構(gòu)造方法,就寫super(….);8.類派生使用關(guān)鍵字extends六、類7.構(gòu)造方法沒有初始化列表。要調(diào)用基類的構(gòu)造方法,就六、類classA{ intn; A(intv){n=v;}}classBextendsA{ intv; B(intn){super(n);//沒有此句,編譯不過。 }}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Bb=newB(4); System.out.println(b.n); }}六、類classA{六、類9.封閉類的構(gòu)造函數(shù)中不需要交代如何初始化成員對(duì)象。classA{ intn; A(intv){n=v;}}classB{ intv; Aa; B(intn){ }}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Bb=newB(4); }}為什么?六、類9.封閉類的構(gòu)造函數(shù)中不需要交代如何初始化成員對(duì)象。七、函數(shù)參數(shù)傳遞 Java中的函數(shù),參數(shù)都是傳值的,沒有傳引用的。如果參數(shù)是對(duì)象,則效果和C++中參數(shù)是指針的情況一樣。七、函數(shù)參數(shù)傳遞 Java中的函數(shù),參數(shù)都是傳值的,沒有傳classA{inti;A(intv){i=v;}}classFunctions{ staticvoidSwap1(Aa1,Aa2) { inttmp=a1.i;a1.i=a2.i;a2.i=tmp;}

staticvoidSwap2(Aa1,Aa2) { Atmp=a1;a1=a2;a2=tmp; }}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Aa=newA(5),b=newA(10); Functions.Swap1(a,b); System.out.printf("%d,%d\n",a.i,b.i); Functions.Swap2(a,b); System.out.printf("%d,%d\n",a.i,b.i); }}輸出:10,510,5classA{inti;A(intv八、包和import語(yǔ)句為避免不同的.java文件中出現(xiàn)名字相同的類導(dǎo)致沖突,Java引入了"包"的概念。類可以分屬不同的包,不同包里的類可以重名。使用“包名.類名”形式就能避免類的命名沖突。類似于C++的“名字空間::類名”用package語(yǔ)句作為.java文件的第一條語(yǔ)句,指明該文件所屬的包名。如果沒有package語(yǔ)句,該文件中的類就都屬于“無(wú)名包”(或叫“默認(rèn)包”defaultpackage)。八、包和import語(yǔ)句為避免不同的.java文件中出現(xiàn)名字八、包和import語(yǔ)句包名可以是一個(gè)標(biāo)識(shí)符,也可以是多個(gè)標(biāo)識(shí)符用"."連接,如:packagepku;packagepku.eecs.cs;八、包和import語(yǔ)句包名可以是一個(gè)標(biāo)識(shí)符,也可以是多個(gè)標(biāo)八、包和import語(yǔ)句程序運(yùn)行時(shí),如果包含main的那個(gè)類的.class文件在當(dāng)前文件夾下,則:如果文件里指定包名是pku,那么該文件編譯出來的.class文件就應(yīng)該位于當(dāng)前文件夾下的pku子文件夾下如果文件里指定包名是pku.eecs.cs,那么該文件編譯出來的.class文件就應(yīng)該位于當(dāng)前文件夾下的pku\eecs\cs子文件夾下總之,包名里的一個(gè)標(biāo)識(shí)符,就代表一個(gè)文件夾。也可以認(rèn)為包就是一個(gè)文件夾。八、包和import語(yǔ)句程序運(yùn)行時(shí),如果包含main的那八、包和import語(yǔ)句在eclipse中,鼠標(biāo)右鍵點(diǎn)擊工程名(或已有的包名),在彈出的菜單上選new->package就可以新建一個(gè)package在eclips工程里,編譯出來的.class文件都放在工程的bin文件夾下,源程序都放在src文件夾下.源程序文件的存放位置與包名的關(guān)系,和.class文件存放位置與包名的關(guān)系一樣。八、包和import語(yǔ)句在eclipse中,鼠標(biāo)右鍵點(diǎn)擊工程八、包和import語(yǔ)句多包程序的例子---有eclipes工程example1八、包和import語(yǔ)句多包程序的例子---有eclip八、包和import語(yǔ)句example1有以下文件:example1\src\HelloWorld.javapublicclassHelloWorld{publicstaticvoidmain(Stringargs[]){

gw1.PackageTestp=newgw1.PackageTest(); p.PrintInfo();

gw1.PackageTest2p2=newgw1.PackageTest2(); p2.PrintInfo();

gw2.subgw1.SubPackageTestsp=newgw2.subgw1.SubPackageTest(); sp.PrintInfo();}}八、包和import語(yǔ)句example1有以下文件:exam八、包和import語(yǔ)句example1\src\gw1\PackageTest.javapackagegw1;publicclassPackageTest{ publicvoidPrintInfo(){ System.out.println("thisisPackageTestObj");

}}八、包和import語(yǔ)句example1\src\gw1\八、包和import語(yǔ)句example1\src\gw1\PackageTest2.javapackagegw1;publicclassPackageTest2{ publicvoidPrintInfo(){ System.out.println("thisisPackageTest2Obj"); }}八、包和import語(yǔ)句example1\src\gw1\八、包和import語(yǔ)句example1\src\gw2\subgw1\SubPackageTest.javapackagegw2.subgw1;publicclassSubPackageTest{publicvoidPrintInfo(){ System.out.println("ThisisSubPackageTestObject");}}Example1程序輸出結(jié)果:thisisPackageTestObjthisisPackageTest2ObjThisisSubPackageTestObject八、包和import語(yǔ)句example1\src\gw2\s八、包和import語(yǔ)句用import語(yǔ)句引入包,可以省去在類前面寫包名importgw1.*;//gw1里面的類,都不用寫包名了importgw2.subgw1.*;//gw1.subgw1里面的類,都不用寫包名了publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ PackageTestp=newPackageTest(); p.PrintInfo(); PackageTest2p2=newPackageTest2(); p2.PrintInfo(); SubPackageTestsp=newSubPackageTest(); sp.PrintInfo(); }}八、包和import語(yǔ)句用import語(yǔ)句引入包,可以省去在八、包和import語(yǔ)句import語(yǔ)句也可以只引入一個(gè)類:importgw1.PackageTest;importgw2.subgw1.*;publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){

PackageTestp=newPackageTest(); p.PrintInfo();

gw1.PackageTest2p2=newgw1.PackageTest2(); p2.PrintInfo(); SubPackageTestsp=newSubPackageTest(); sp.PrintInfo();}}八、包和import語(yǔ)句import語(yǔ)句也可以只引入一個(gè)類八、包和import語(yǔ)句一個(gè)包對(duì)應(yīng)于一個(gè)文件夾,但不包括該文件夾下的子文件夾。例如:importgw2.*;使得gw2文件夾下的類被import進(jìn)來,但是gw2\subgw1文件夾下的類,并沒有被import進(jìn)來。要import它們,還是需要寫:importgw2.subgw1.*;

八、包和import語(yǔ)句一個(gè)包對(duì)應(yīng)于一個(gè)文件夾,但不包括該文九、類的可使用范圍

定義類時(shí),前面可以加public關(guān)鍵字,也可以不加。加了,稱為“公有類”。同一個(gè)包里的類,不論是否在同一個(gè).java文件中,不論是否是public,都可以互相使用。只能使用其他包里的public類,不能使用其他包里的非public類。九、類的可使用范圍定義類時(shí),前面可以加public關(guān)鍵字,也十、類成員的可訪問范圍

1.類的成員,前面可以加public(公有成員),private(私有成員)或protected(保護(hù)成員)。不加這三個(gè)標(biāo)識(shí)符,并不缺省為私有,而是稱為“友好成員”。一個(gè)類,可以訪問同包類對(duì)象的公有、友好和保護(hù)成員,不可以訪問同包類的私有成員3.一個(gè)類,可以訪問異包類對(duì)象的公有成員,不能訪問異包類對(duì)象的保護(hù)、私有和友好成員十、類成員的可訪問范圍1.類的成員,前面可以加publ十、類成員的可訪問范圍

4.子類不能訪問父類的私有成員。友好成員和保護(hù)成員的區(qū)別是:與父類不在同一包中的子類,可以訪問父類的保護(hù)成員,不能訪問父類的友好成員。十、類成員的可訪問范圍4.子類不能訪問父類的私有成員。十、類成員的可訪問范圍(示例程序)

packagegw1;publicclassPackageTest{ publicvoidPrintInfo(){//友好方法 System.out.println("thisisPackageTestObj"); } voidFriendFunc() { System.out.println("inFriendFunc"); } privatevoidPrivateFunc() { System.out.println("inPrivateFunc"); } protectedvoidProtectedFunc() { System.out.println("inProtectedFunc"); }}example1\src\gw1\PackageTest.java十、類成員的可訪問范圍(示例程序)packagegw1;e十、類成員的可訪問范圍(示例程序)

packagegw1;publicclassPackageTest2{ publicvoidPrintInfo(){ System.out.println("thisisPackageTest2Obj"); PackageTestt=newPackageTest(); t.FriendFunc();//ok,可訪問同包類對(duì)象的友好成員 t.PrivateFunc();//錯(cuò),不可訪問同包類對(duì)象私有成員

t.ProtectedFunc();//ok,可訪問同包類對(duì)象保護(hù)成員

t.PrintInfo(); }}example1\src\gw1\PackageTest2.java十、類成員的可訪問范圍(示例程序)packagegw1;e十、類成員的可訪問范圍(示例程序)

importgw1.*;importgw2.subgw1.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ PackageTestp=newPackageTest(); p.PrintInfo();//ok,可以訪問異包類對(duì)象的公有成員 p.FriendFunc();//wrong,不可訪問異包類對(duì)象的友好成員 p.PrivateFunc();//wrong,不可訪問異包類對(duì)象的私有成員 p.ProtectedFunc();//wrong,不可訪問異包類對(duì)象的保護(hù)成員 }}example1\src\HelloWorld.java十、類成員的可訪問范圍(示例程序)importgw1.*;十、類成員的可訪問范圍(示例程序)

classDerivedextendsPackageTest{ voidTest(){ PackageTestp=newPackageTest(); p.ProtectedFunc();//錯(cuò),不可訪問異包對(duì)象的保護(hù)成員

p.FriendFunc();//wrong,不可訪問異包對(duì)象的友好成員

ProtectedFunc();//ok,可以調(diào)用異包基類的保護(hù)方法 PrivateFunc();//wrong,不能調(diào)用基類私有方法

FriendFunc();//wrong,不能調(diào)用異包基類的友好方法

}}example1\src\HelloWorld.java十、類成員的可訪問范圍(示例程序)classDerived十一、super關(guān)鍵字

用“super.成員名”來訪問基類的成員;在構(gòu)造方法中用“super(….)”調(diào)用基類構(gòu)造方法如果派生類的構(gòu)造方法沒有調(diào)用基類的構(gòu)造方法,那么等效于用“super();”調(diào)用基類的無(wú)參構(gòu)造方法classA{ intv; A(intn){v=n;} voidInit(){ System.out.println("A.Init"); }}十一、super關(guān)鍵字用“super.成員名”來訪問基classBextendsA{ B(intn){super(n);} voidInit(){

super.Init(); System.out.println("B.Init"); }}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Bb=newB(5); b.Init(); }}十一、super關(guān)鍵字輸出:A.InitB.InitclassBextendsA{十一、super關(guān)鍵假設(shè)有基類方法Function1,返回值類型是A,派生類中可以寫同名同參數(shù)表的Funciton1,返回值類型是可以是A,也可以是A的派生類。重寫基類的方法時(shí),不能縮小方法的可訪問范圍。比如基類的Function1是public的,那么派生類中重寫的同名同參數(shù)表的Function1,就不能是友好、保護(hù)或私有的。十二、派生類重寫(覆蓋)基類方法假設(shè)有基類方法Function1,返回值類型是A,派生final關(guān)鍵字可以修飾類、成員變量和方法中的局部變量final關(guān)鍵字修飾的類,不允許有派生類 finalclassA{} A不能有派生類。Java中的String類,就是final的final修飾成員變量和局部變量時(shí),作用相當(dāng)于C++的const,即常量4.final成員變量和局部變量必須在聲明的時(shí)候初始化。十三、final關(guān)鍵字final關(guān)鍵字可以修飾類、成員變量和方法中的局部變量十三 5.final成員變量必須在聲明時(shí)初始化或在構(gòu)造函數(shù)中初始化,初始化后,其值不可改變。以下初始化方式均可:classA{ finalintv=4; A(intn){}}或:classA{ finalintv; A(intn){v=n;}}十三、final關(guān)鍵字 5.final成員變量必須在聲明時(shí)初始化或在構(gòu)造函數(shù)中初6. final局部變量也可以不初始化,但是賦值或創(chuàng)建一次后,就不能修改其值。7.一個(gè)對(duì)象是final的,其含義并不是其成員變量的值不能被修改,而是它不能再指向別的對(duì)象,類似于C++的

類型*const指針名;如int*constp;十三、final關(guān)鍵字6. final局部變量也可以不初始化,但是賦值或創(chuàng)建一次后publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ finalAa; finalintn; n=4; a=newA(10); System.out.printf("%d,%d\n",n,a.v); n=9;//wrong a=newA(20);//wrong a.v=100;//wrong; a.k=100;//ok; System.out.println(a.k); }}十三、final關(guān)鍵字(例程)classA{ finalintv; intk; A(intn){v=n;}}去掉出錯(cuò)的語(yǔ)句后,輸出:4,10100publicclassHelloWorld{十三、1. abstract類相當(dāng)于C++中的抽象類,abstract方法相當(dāng)于C++的純虛函數(shù)。只有abstract類才能有abstract方法。和C++不同之處在于,abstract類中可以沒有abstract方法。 abstractclassA{ abstractvoidfunc();//不能寫函數(shù)體 }2.abstract類不能用new運(yùn)算符創(chuàng)建對(duì)象。

十四、abstract類和abstract方法1. abstract類相當(dāng)于C++中的抽象類,abstr1.接口(interface)是Java中的重要概念。接口和類有點(diǎn)像,但是其所有的成員變量都是public且final的(不寫public和final也有一樣),所有的成員函數(shù)都是abstract且public的(不寫public和abstract也有一樣)。例如:interfaceA{ intn=5; voidFunc(inta,intb); intPrintInfo();}可以定義接口變量,如:Aa;但是,不能用new運(yùn)算符來創(chuàng)建“接口對(duì)象”。

十五、接口1.接口(interface)是Java中的重要概念。接2.接口可以派生出子接口:interfaceA{ intn=5; voidFunc(inta,intb); intPrintInfo();}interfaceBextendsA{ doublef=3.0; intCount();}十五、接口2.接口可以派生出子接口:十五、接口3.接口可以派生出類。從接口派生類,用implements關(guān)鍵字,也稱為類“實(shí)現(xiàn)”了某個(gè)接口:interfaceA{ intn=5; voidFunc(inta,intb); intPrintInfo();}classCimplementsA{ doublec; intSomeFunc(){return0;} publicvoidFunc(inta,intb){} publicintPrintInfo(){return1;}}十五、接口

實(shí)現(xiàn)了接口的類,一定要對(duì)接口中的全部方法都重寫,寫成public的,要寫出函數(shù)體。若有接口的方法沒有被重寫,則這個(gè)類就必須是abstract的。3.接口可以派生出類。從接口派生類,用implement4.可以讓接口變量指向一個(gè)new出來的實(shí)現(xiàn)了該接口的類的對(duì)象:interfaceB{ intv=6;voidFuncB();}classEimplementsB{ publicvoidFuncB(){ System.out.println("inB.FuncB"); }}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Bb=newE(); b.FuncB(); }}

十五、接口輸出:inB.FuncB4.可以讓接口變量指向一個(gè)new出來的實(shí)現(xiàn)了該接口的類的 5.接口也可以用public來修飾,稱為“公有接口”。public接口可以被任何類實(shí)現(xiàn),非public接口僅可以被同一個(gè)包中的類實(shí)現(xiàn)。 publicinterfaceA{

}十五、接口 5.接口也可以用public來修飾,稱為“公有接口”。Java中沒有多繼承。一個(gè)類最多只能有一個(gè)基類。但是一個(gè)類可以在繼承一個(gè)基類的同時(shí),還實(shí)現(xiàn)多個(gè)接口(也可以只實(shí)現(xiàn)多個(gè)接口而不繼承任何類)。十六、“多繼承”interfaceA{ intn=5; voidFunc(inta,intb); intPrintInfo();}interfaceB{ intv=6; voidFuncB();}classC{}classDextendsCimplementsA,B{ publicvoidFunc(inta,intb){} publicintPrintInfo(){return0;} publicvoidFuncB(){}}Java中沒有多繼承。一個(gè)類最多只能有一個(gè)基類。但是一個(gè)類可1.Java中的方法,除了類方法(靜態(tài)成員函數(shù))外,都可以認(rèn)為相當(dāng)于是C++中的虛函數(shù)。十七、多態(tài)2.Java中多態(tài)的規(guī)則如下:

1)通過基類對(duì)象,調(diào)用基類和派生類都有的同名同參數(shù)表的方法時(shí),是多態(tài)。該基類對(duì)象如果指向的確是基類對(duì)象,那么指向的就是基類的方法,如果指向的是派生類對(duì)象,那么執(zhí)行的就是派生類的方法。 2)通過接口變量,調(diào)用接口和實(shí)現(xiàn)了該接口的類都有的同名同參數(shù)表的方法時(shí),是多態(tài)。被執(zhí)行的是類的方法。接口存在的目的,就是為了實(shí)現(xiàn)多態(tài)1.Java中的方法,除了類方法(靜態(tài)成員函數(shù))外,都可十七、多態(tài)(例程)interfaceIA{ intn=5; voidFuncIA();}interfaceIB{ voidFuncIB();}classA{ voidFuncA(){ System.out.println("inA.FuncA"); }}十七、多態(tài)(例程)interfaceIA{classBextendsAimplementsIA,IB { voidFuncA(){ System.out.println("inB.FuncA"); } publicvoidFuncIA(){ System.out.println("inB.FuncIA"); } publicvoidFuncIB(){ System.out.println("inB.FuncIB"); }}classBextendsAimplementsIclassCextendsB{ voidFuncA(){ System.out.println("inC.FuncA"); } publicvoidFuncIA(){ System.out.println("inC.FuncIA"); }}classCextendsBpublicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Aa; IAia; IBib; a=newA(); a.FuncA(); a=newB(); a.FuncA(); a=newC(); a.FuncA(); ia=newB(); ia.FuncIA(); ia=newC(); ia.FuncIA(); ib=newB(); ib.FuncIB(); ib=newC(); ib.FuncIB(); }}輸出:inA.FuncAinB.FuncAInC.FuncAinB.FuncIAinC.FuncIAinB.FuncIBinB.FuncIBpublicclassHelloWorld{輸出:十八、字符串String類:用來表示字符串

Strings1,s2; s1="hello"; s2="hello"; System.out.println(s1==s2); s2=newString("hello"); System.out.println(s1==s2);

輸出: true false十八、字符串String類:用來表示字符串十八、字符串String類:用來表示字符串

Strings=newString("hello"); System.out.println(s.equals("hello")); System.out.println(s=="Hello");

輸出: true false十八、字符串String類:用來表示字符串十八、字符串String類:用來表示字符串

intx; Strings="123456"; x=Integer.parseInt(s); System.out.println(x); Stringstr=String.valueOf(1233.223); System.out.println(str);輸出:1234561233.223十八、字符串String類:用來表示字符串十八、字符串2.字符串和字節(jié)數(shù)組 byted[]="abc你我他".getBytes(); System.out.println(d.length); Strings=newString(d,3,2); System.out.println(s);s=newString(d);System.out.println(s);出:9你abc你我他十八、字符串2.字符串和字節(jié)數(shù)組十八、字符串3.正則表達(dá)式 Stringregex="[1-9][0-9]*[.]?[0-9]*";

//?代表出現(xiàn)0次或一次

Stringstr1="12r34a5"; Stringstr2="123.45908"; if(str1.matches(regex)) System.out.println(str1+"是數(shù)字"); else{ System.out.println(str1+"不是數(shù)字"); Stringresult=str1.replaceAll("\\D+","");

//\D代表任意非數(shù)字字符,+代表出現(xiàn)一次或多次

System.out.println(result); } System.out.println(str2.matches(regex));輸出:12r34a5不是數(shù)字12345true十八、字符串3.正則表達(dá)式輸出:十八、字符串3.正則表達(dá)式Stringregex="[\\s\\d\\p{Punct}]+";Stringsentence="This,is890what'tword:me";Stringwords[]=sentence.split(regex);for(inti=0;i<words.length;++i) System.out.println(words[i]);

輸出:Thisiswhattwordme十八、字符串3.正則表達(dá)式輸出:十八、字符串4.StringBuffer類String字符串不能修改,StringBuffer可以StringBufferstr=newStringBuffer("123");str.append("456");System.out.println(str);charc=str.charAt(2);System.out.println(c);str.setCharAt(0,'X');System.out.println(str);str.insert(2,"abc");System.out.println(str);Strings1="stringobj";str=newStringBuffer(s1);Strings2=newString(str);輸出:1234563X23456X2abc3456十八、字符串4.StringBuffer類輸出:十九、圖形用戶界面使用圖形界面,需要importjava.swing.*;十九、圖形用戶界面使用圖形界面,需要importjava十九、圖形用戶界面JComponent類及其派生類的對(duì)象叫“組件”Container類及其派生類的對(duì)象叫“容器”容器上可以添加組件雖然組件也是容器,但許多組件一般不當(dāng)做容器用,比如JButton。但JPanel會(huì)作為容器使用。窗口一般從Jframe派生對(duì)話框從Jdialog派生在一個(gè)窗口或?qū)υ捒蛏峡梢蕴砑咏M件各種按鈕,編輯框,選擇框,列表框,菜單,都是組件。十九、圖形用戶界面JComponent類及其派生類的對(duì)象叫“Andriod課件---2-C--程序員Java速成十九、圖形用戶界面//空窗口程序importjavax.swing.*;importjavax.swing.JFrame.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ JFramewindow1=newJFrame("window1"); window1.setBounds(60,100,180,100); window1.setVisible(true); }}十九、圖形用戶界面//空窗口程序十九、圖形用戶界面//空窗口程序importjava.awt.*;importjavax.swing.*;importjavax.swing.JFrame.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ TextWindowwin=newTextWindow(); win.setTitle("windowwithtext"); }}十九、圖形用戶界面//空窗口程序classTextWindowextendsJFrame{ JTextFieldtext1,text2; JButtonbt; publicTextWindow(){ init(); setBounds(100,100,236,150); setVisible(true); }十九、圖形用戶界面classTextWindowextendsJFram voidinit(){ setLayout(newFlowLayout());//設(shè)置布局

text1=newJTextField("uneditable"); text1.setEditable(false); text2=newJTextField(10);//10個(gè)字符寬

add(text1); add(text2); bt=newJButton("PleasePush"); add(bt); }}往容器上放組件前,要設(shè)置布局。布局決定了組件的擺放方式。十九、圖形用戶界面 voidinit(){十九、圖形用戶界面十九、圖形用戶界面運(yùn)行結(jié)果:十九、圖形用戶界面運(yùn)行結(jié)果:二十、事件響應(yīng)有些對(duì)象上能夠發(fā)生“事件”,稱為“事件源”比如按鈕按下就是一個(gè)事件,按鈕就是事件源列表框某項(xiàng)被選中就是一個(gè)事件,列表框就是事件源窗口上鼠標(biāo)移動(dòng)或點(diǎn)擊就是一個(gè)事件,窗口就是事件源窗口或編輯框里用戶敲擊鍵盤也是事件,窗口或編輯框就是事件源響應(yīng)事件需要:importjava.awt.event.*;二十、事件響應(yīng)有些對(duì)象上能夠發(fā)生“事件”,稱為“事件源”二十、事件響應(yīng)發(fā)生事件后,程序應(yīng)該要做出反應(yīng)。因此需要一個(gè)“監(jiān)視器”對(duì)事件源進(jìn)行監(jiān)視,這樣,有事件發(fā)生時(shí),監(jiān)視器就能對(duì)事件做出處理。事件源通過調(diào)用一些方法,將某個(gè)對(duì)象注冊(cè)為自己的監(jiān)視器,如文本框,可以用 addActionListener(對(duì)象名);將一個(gè)對(duì)象注冊(cè)為自己的監(jiān)視器。二十、事件響應(yīng)發(fā)生事件后,程序應(yīng)該要做出反應(yīng)。因此需要一個(gè)“二十、事件響應(yīng)能作為監(jiān)視器使用的對(duì)象,必須實(shí)現(xiàn)某些特定的接口。比如要作為文本框的監(jiān)視器的對(duì)象,必須實(shí)現(xiàn)ActionListener接口。ActionListener接口有以下方法:publicvoidactionPerformed(ActionEvente)在文本框中有敲回車時(shí),文本框就會(huì)創(chuàng)建一個(gè)ActionEvent對(duì)象,然后以此對(duì)象作為參數(shù),調(diào)用監(jiān)視器對(duì)象的該方法,通過該參數(shù),就能知道具體發(fā)生的事件是什么樣的,以及事件發(fā)生在哪個(gè)源上。事件有不同規(guī)定類型,ActionEvent是其中一種二十、事件響應(yīng)能作為監(jiān)視器使用的對(duì)象,必須實(shí)現(xiàn)某些特定的接口二十、事件響應(yīng)比如,ActionEvent有以下方法:ObjectgetSource();取得事件源對(duì)象StringgetActionCommand()獲取和事件有關(guān)的一個(gè)字符串所有的Java對(duì)象都是從Object對(duì)象派生而來二十、事件響應(yīng)比如,ActionEvent有以下方法:二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:addMouseListener:添加響應(yīng)鼠標(biāo)點(diǎn)擊、進(jìn)出組件事件的監(jiān)視器

監(jiān)視器需要實(shí)現(xiàn)MouseListener接口addMouseMotionListener:添加響應(yīng)鼠標(biāo)移動(dòng)和拖動(dòng)事件的監(jiān)視器

監(jiān)視器需要實(shí)現(xiàn)MouseMotionListener接口二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:MouseListener:有以下方法: publicvoidmouseExited(MouseEventarg0); publicvoidmouseEntered(MouseEventarg0); publicvoidmousePressed(MouseEventarg0); publicvoidmouseReleased(MouseEventarg0); publicvoidmouseClicked(MouseEventarg0);二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:MouseMotionListener:有以下方法: publicvoidmouseMoved(MouseEventarg0); publicvoidmouseDraged(MouseEventarg0);二十、事件響應(yīng)響應(yīng)鼠標(biāo)事件,用:二十、事件響應(yīng)響應(yīng)鍵盤事件,用:addKeyListener:添加響應(yīng)鍵盤敲擊的監(jiān)視器

監(jiān)視器需要實(shí)現(xiàn)KeyListener接口KeyListener有以下方法:publicvoidkeyTyped(KeyEventarg0)publicvoidkeyPressed(KeyEventarg0)publicvoidkeyReleased(KeyEventarg0)二十、事件響應(yīng)響應(yīng)鍵盤事件,用:二十一、內(nèi)部類classOut{ intn; Innerin;

classInner{//內(nèi)部類 Strings; voidPrintInfo(){ System.out.println("in="+ Integer.toString(n)+",s="+s); } }}二十一、內(nèi)部類classOut{二十一、內(nèi)部類publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Outo=newOut();// o.in=newOut.Inner();//wrong o.n=100; o.in=o.newInner(); o.in.s="hello"; o.in.PrintInfo(); Out.Innerobj; obj=o.newInner();//內(nèi)部類的對(duì)象一定要通過一個(gè)外部類的對(duì)象來new obj.PrintInfo();// obj=newOut.Inner();//wrong }}輸出:in=100,s=helloin=100,s=null二十一、內(nèi)部類publicclassHelloWorld二十二、靜態(tài)內(nèi)部類classOut{ intn; Innerin; staticclassInner{ Strings; voidPrintInfo(){ //System.out.println("in="+ Integer.toString(n));//wrong System.out.println("s="+s); } }}靜態(tài)內(nèi)部類的成員函數(shù)不能訪問外部類的非靜態(tài)成員二十二、靜態(tài)內(nèi)部類classOut{二十二、靜態(tài)內(nèi)部類publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Outo=newOut(); o.in=newOut.Inner(); o.n=100;// o.in=o.newInner();//wrong o.in.s="hello"; o.in.PrintInfo(); Out.Innerobj;// obj=o.newInner();//wrong obj=newOut.Inner(); obj.s="hello2"; obj.PrintInfo(); }}輸出:s=hellos=hello2二十二、靜態(tài)內(nèi)部類publicclassHelloWor二十三、匿名類可以直接創(chuàng)建一個(gè)子類的對(duì)象,而不需要給出類名,這個(gè)無(wú)名子類就是匿名類。classA{ voidPrintInfo(){}}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Aa1=newA(){ voidPrintInfo(){ System.out.println("hello"); } }; a1.PrintInfo();

}}輸出:hello二十三、匿名類可以直接創(chuàng)建一個(gè)子類的對(duì)象,而不需要給出類名,二十三、匿名類interfaceA{ voidPrintInfo();}publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ Aa1=newA(){ publicvoidPrintInfo(){ System.out.println("hello"); } }; a1.PrintInfo(); }}輸出:hello二十三、匿名類interfaceA{輸出:二十四、獲取文件屬性使用File類:importjava.io.*;publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){ Filef1=newFile("c:\\tmp","test.txt"); System.out.println(f1.getName()+"是可寫的嗎:"+f1.canRead()); System.out.println(f1.getName()+"長(zhǎng)度:"+f1.length()); System.out.println(f1.getName()+"絕對(duì)路徑:"+f1.getAbsolutePath()); System.out.println(f1.getName()+"是否是文件夾:"+f1.isDirectory());}}輸出:test.txt是可寫的嗎:truetest.txt長(zhǎng)度:23test.txt絕對(duì)路徑:c:\tmp\test.txttest.txt是否是文件夾:false二十四、獲取文件屬性使用File類:輸出:二十五、創(chuàng)建文件夾使用File類:importjava.io.*;publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){ Filef1=newFile("c:\\tmp\\testdir"); if(f1.mkdir()) System.out.println("文件夾創(chuàng)建成功"); else System.out.println("文件夾創(chuàng)建失敗或已存在");

}}二十五、創(chuàng)建文件夾使用File類:二十六、列出目錄中的文件要用File類的list方法或listFiles方法還要用到接口FileNameFilter的子類對(duì)象來存放要列出的文件名符合的條件,比如”*.java”等importjava.io.*;classFileAcceptimplementsFilenameFilter{ StringextendName; publicbooleanaccept(Filedir,Stringname){ returnname.endsWith(extendName); }}二十六、列出目錄中的文件要用File類的li

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論