【北京大學(xué)計算機(jī)系】Java講義-完整版_第1頁
【北京大學(xué)計算機(jī)系】Java講義-完整版_第2頁
【北京大學(xué)計算機(jī)系】Java講義-完整版_第3頁
【北京大學(xué)計算機(jī)系】Java講義-完整版_第4頁
【北京大學(xué)計算機(jī)系】Java講義-完整版_第5頁
已閱讀5頁,還剩570頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1Java講義北京大學(xué)計算機(jī)系2第一章Java的類北京大學(xué)計算機(jī)系代亞非3第一章Java的類1.1有關(guān)面向?qū)ο蟮母拍?.2Java語言的特點(diǎn)1.3Java的開發(fā)環(huán)境1.4第一個Java程序1.5Java類型系統(tǒng)1.6Java中字符串的類1.7Java中的類、方法和變量1.8Java名空間及訪問規(guī)則1.9Java中的抽象類、接口和程序包1.10對象的構(gòu)造函數(shù)41.1有關(guān)面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計圍繞的幾個主要概念:抽象數(shù)據(jù)類型、類、類型層次(子類),繼承性、多態(tài)性。51.1有關(guān)面向?qū)ο蟮母拍頲lassCar{intcolor_number;intdoor_number;

intspeed;

voidbrake(){…}voidspeedUp(){…};voidslowDown(){…}}

計算機(jī)中的對象的原型

現(xiàn)實生活中的對象

數(shù)據(jù)抽象類型61.1有關(guān)面向?qū)ο蟮母拍钍裁词穷??類是描述對象的“基本原型”,它定義一種對象所能擁有的數(shù)據(jù)和能完成的操作,在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。variablesmethods

程序中的對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。71.1有關(guān)面向?qū)ο蟮母拍钭兞浚杭粗笇ο蟮乃赖臓顟B(tài)方法:指對象的功能單元。什么是消息?軟件對象通過相互間傳遞消息來相互作用和通信一個消息由三部分組成:1.接受消息的對象2.要完成方法的名字3.方法需要的參數(shù)對象B對象Amessage81.1有關(guān)面向?qū)ο蟮母拍钜粋€例子在程序中操作對象是類的一個實例:即對象創(chuàng)建一個對象Helloobj=newHello();調(diào)用方法obj.showString(“HelloWorld!”)classHello{

}privateStrings;publicvoidshowString()

{System.out.println(s);}publicvoidchangeString(Stringstr){s=str;returns;}91.1有關(guān)面向?qū)ο蟮母拍钍裁词欠庋b?封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝實際私有數(shù)據(jù)

方法上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。

方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)101.1有關(guān)面向?qū)ο蟮母拍钍裁词亲宇?子類是作為另一個類的擴(kuò)充或修正所定義的一個類.bicycle(superclass)MountainbikesRacingbikesTandembikessubclass111.1有關(guān)面向?qū)ο蟮母拍钍裁词抢^承?繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.classCar{intcolor_number;intdoor_number;intspeed;

push_break(){…}add_oil(){…}}

classTrash_Car

extendsCar{doubleamount;fill_trash(){…}}121.1有關(guān)面向?qū)ο蟮母拍钍裁词欠椒ǖ母采w?在子類中重新定義父類中已有的方法。classCar{intcolor_number;intdoor_number;intspeed;

push_break(){speed=0;}add_oil(){…}}

classTrash_Car

extendsCar{doubleamount;fill_trash(){…}

push_break(){speed=speed-10;}}131.1有關(guān)面向?qū)ο蟮母拍钍裁词欠椒ǖ闹剌d(多態(tài)性)?在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)。類voidshow(intint_num)voidshow(doubledouble_num)voidshow(nitnit_um,floatfloat_um)123141.2Java語言的特點(diǎn)Java是什么?

Java=“C++”--“復(fù)雜性和奇異性”+“安全性和可移植性”Java由那些特性?(1)面向?qū)ο蠓庋b性、多態(tài)性、繼承性、動態(tài)鏈接(2)操作平臺無關(guān)性嚴(yán)格的語言定義:“沒有依據(jù)機(jī)器的不同而不同”或“由編譯器決定”等字眼,最后的目標(biāo)碼都是一致的,初值都是確定的151.2Java語言的特點(diǎn)兩種工作模式的比較源程序Java編譯器SPARCpentiumPowerpc中間碼PowerpcpentiumSPARC二進(jìn)制源程序SPARCPowerpcpentiumPowerpcpentiumSPARC編譯器二進(jìn)制Java解釋器161.2Java語言的特點(diǎn).編譯,沒有絕對地址調(diào)入包含,繼承所用道的所有類,內(nèi)存分配確定,編程真正可執(zhí)行的機(jī)器碼Java源程序(.java文件)Java編譯器JavaBytecode(.class文件)系統(tǒng)執(zhí)行平臺Bytecode解釋器Bytecode載入器字節(jié)碼校驗器不存在偽造的指針不違反訪問權(quán)限不非法訪問對象不導(dǎo)致操作棧溢出

171.2Java語言的特點(diǎn)Java虛擬機(jī)JavainterpreterJust-in-timecompilerRuntimeSystemOperatingSystemHardware不同的操作系統(tǒng)有不同的虛擬機(jī).它類似一個小巧而高效的CPU.byte-code代碼是與平臺無關(guān)的是虛擬機(jī)的機(jī)器指令.Java字節(jié)代碼運(yùn)行的兩種方式:interpreter(解釋方式)Just-in-time(即時編譯):有代碼生成器將字節(jié)代碼轉(zhuǎn)換成本機(jī)的機(jī)器代碼,然后可以以較高速度執(zhí)行.

181.2Java語言的特點(diǎn)(3)安全問題Java是在網(wǎng)絡(luò)環(huán)境下使用的語言一個安全的網(wǎng)絡(luò)至少要防止以下幾種破壞的可能性:毀滅系統(tǒng)資源消耗系統(tǒng)資源挖掘系統(tǒng)或個人機(jī)密騷擾正常工作的進(jìn)行191.2Java語言的特點(diǎn)Java源程序(.java文件)Java編譯器JavaBytecode(.class文件)Bytecode載入器Bytecode解釋器系統(tǒng)執(zhí)行平臺語言定義publicprotectedprivatefinal取消指針自動回收垃圾Bytecode檢查限定對象的存取權(quán)限系統(tǒng)堆棧溢出參數(shù)類型一致程序執(zhí)行系統(tǒng)WWW瀏覽器限制Java小應(yīng)用程序的不正當(dāng)使用201.2Java語言的特點(diǎn)(4)多線程Java提供現(xiàn)成的類Thread,只要繼承這個類就可以編寫多線程的程序。(5)Java與C及C++的區(qū)別不再有#include和#define等于處理功能不再有structure,union及typedef不再有函數(shù)、不再有指針、不再有多重繼承不再有g(shù)oto不再有操作符重載(OperatiorOverloading)取消自動類型轉(zhuǎn)換,要求強(qiáng)制轉(zhuǎn)換211.3Java的開發(fā)環(huán)境Java開發(fā)環(huán)境JDKJDK中有Java編譯器和bytecode解釋器Applwtviewer是小應(yīng)用程序的bytecode解釋器JDK的安裝直接執(zhí)行221.3Java的開發(fā)環(huán)境產(chǎn)生如下目錄結(jié)構(gòu)java\bin的目錄下包含義下主要文件:javac:Java編譯器,用來將java程序編譯成

Bytecodejava:Java編譯器,執(zhí)行已經(jīng)轉(zhuǎn)換成Bytecode的

java應(yīng)用程序.jdb:Java調(diào)試器,用來調(diào)試java程序javap:反編譯,將類文件還原回方法和變量.javadoc:文檔生成器,創(chuàng)建HTML文件appletviwer:Java解釋器,用來解釋已經(jīng)轉(zhuǎn)換成

Bytecode的java小應(yīng)用程序.231.3Java的開發(fā)環(huán)境\java\lib子目錄庫函數(shù),其中不要解開.在中加入以下兩條命令1.PATHc:\…\java\bin2.SETCLASSPATH=.;c:\...\lib\classes.zip;c:\myclasses;241.3Java的開發(fā)環(huán)境C:\javabinlibclasses.zipjavacjavaappletviewer用戶類文件所在目錄myclasses當(dāng)前目錄251.3Java的開發(fā)環(huán)境vj1.1++的使用1.進(jìn)入vj,創(chuàng)建一個project2.加入java文件3.編輯java文件4.編譯java文件5.Build一個project文件6.運(yùn)行java程序

--如果是小應(yīng)用程序,則直接在VJ環(huán)境下運(yùn)行

--如果是應(yīng)用程序,則在dos下運(yùn)行261.4你的第一個Java程序編輯存盤:主類名(含有main方法)和文件名要一致性編譯程序運(yùn)行程序:javaHelloWorldApp“myjava”運(yùn)行結(jié)果:Hi,myjavaclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println(“Hi,”+args[0]);}}Java應(yīng)用和Java小應(yīng)用程序271.4你的第一個Java程序1.聲明一個類:publicclassHelloWorldApp{},類名的第一個字母要大寫2.一個類中可有很多方法,main方法是運(yùn)行程序的第一個方法,方法名的第一個字母要小寫.是向屏幕輸出,相當(dāng)于C中的printf();publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println(“Hi,”+args[0]);}}281.4你的第一個Java程序4.命令行參數(shù)的獲取

c:>javaHelloWorldAppmyjava!6.字符串的拼接publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println(“Hi,”+args[0]);}}291.4你的第一個Java程序Java小應(yīng)用程序不能直接執(zhí)行和使用,必須要在瀏覽器中執(zhí)行importjava.applet.Applet;importjava.awt.*;publicclassHelloAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld”,0,50);}}編輯存盤:主類名(extendsApplet)和文件名一致編譯代碼編寫HTML文件301.4你的第一個Java程序運(yùn)行applet程序:2.在瀏覽器中運(yùn)行運(yùn)行結(jié)果:HelloWorld!<html><body><appletcode=“HellApplet.class”width=200height=100></applet></body></html>311.4你的第一個Java程序理解程序1.import語句相當(dāng)于C語言中的include每2.每一個applet都是的子類用extends繼承3.applet中沒有main方法importjava.applet.Applet;importjava.awt.*;publicclassHelloAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld”,0,50);}}321.4你的第一個Java程序4.當(dāng)applet被瀏覽器運(yùn)行時,paint語句自動執(zhí)行5.在applet中與屏幕輸出有關(guān)的操作通過Graphics對象來實現(xiàn)6.一個Java源文件內(nèi)最多只能有一個public類,稱為主類,且必須和文件名同名importjava.applet.Applet;importjava.awt.*;publicclassHelloAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld”,0,50);}}331.5Java類型系統(tǒng)Javatypesystemprimitivereferencenullcharnumericbooleanclassinterfacearrayintegralfloating-pointbyteshortintlongfloatdouble341.5Java類型系統(tǒng)byte8位2的補(bǔ)碼(byte)0short16位2的補(bǔ)碼(short)0int32位2的補(bǔ)碼0long64位2的補(bǔ)碼0Lfloat32位IEEE754浮點(diǎn)數(shù)標(biāo)準(zhǔn)double64位IEEE754浮點(diǎn)數(shù)標(biāo)準(zhǔn)char16位同一碼字符集‘\u0000’(Unicodecharacter)351.5Java類型系統(tǒng)程序:保留字,標(biāo)識符(類名、域名、方法名、符號常量、局部變量,標(biāo)號、…),操作符、界定符,字面常量。聲明一個變量intdata=10;BooleanisAlived;Java中的操作符:與C基本一致Java中不再有指針了361.5Java類型系統(tǒng)在Java中”引用“是指向一個對象在內(nèi)存中的位置,在本質(zhì)上是一種帶有很強(qiáng)的完整性和安全性的限制的指針.當(dāng)你聲明某個類,接口或數(shù)組類型的一個變量時,那個變量的值總是某個對象的引用或者是null引用.指針就是簡單的地址而已,引用除了表示地址而外,還象被引用的數(shù)據(jù)對象的縮影,還提供其他信息.指針可以有++,--運(yùn)算,引用不可以運(yùn)算.371.5Java類型系統(tǒng)s1s210001s2=s1;astring10001classMydate{intyear;intmonth;intday;}

Mydatetoday=newMyDate()00010008todays1=“astring”;例:Strings1;Strings2;381.5Java類型系統(tǒng)能夠動態(tài)取得的內(nèi)存有兩種,一種是對象實體,一種數(shù)組.Java用new申請內(nèi)存,不需要自己釋放不用的內(nèi)存.在Java中,定義數(shù)組時不必給出數(shù)組的大小,因為Java的數(shù)組是動態(tài)分配的。數(shù)組變量實際上是一個引用變量,因此要實例化才能使用。例:intArray[];Array=newint[8];391.5Java類型系統(tǒng)例:StringarrayOfString[]=newString[10];每個數(shù)組元素包含一個對字符串對象的引用,此時值分配了包含字符串引用的空間,并沒有對字符串本身分配內(nèi)存,此時不能訪問。arrayOfStringfor(inti=0;i<arrayString.length;i++)arrayOfString[i]=newString(“Hello”+i)arrayOfString[0]arrayOfString[1]arrayOfString[8]arrayOfString[9]對數(shù)組的引用對字符串的引用401.6Java中的字符串Java中的字符串類String和StringBufferString類的定義和實例的生成例:Stringstr;str=“thisisastring”或:Stringstr1=newString(“hello”);或:Stringstr2=“aaaa”;String類與其它類型的轉(zhuǎn)換例1:將實型數(shù)轉(zhuǎn)換成字符串System.out.println(String.valueOf(Math.PI));.411.6Java中的字符串有兩個字符串str1,str2str1=str2;是指兩個引用指向同一個地址str1.equals(str2)是指兩個字符串內(nèi)容相等獲取String對象的信息例如:Strings=“thisisastring”;intlen=s.length();booleanresult=s.equal(“thisisa特test”);charch=s.charAt(6);421.6Java中的字符串StringBuffer的字符串的內(nèi)容是可以改變的創(chuàng)建StringBuffer對象StringBufferstr=newStringbuffer(“hello”);獲取StringBuffer對象的信息intlen=str.length();例:StringBuffersb=newStringBuffer(“DrinkJava!”);sb.insert(6,”Hot”);System.out.println(sb.toString());

DrinkHotJava!System.out.println接受的是String類431.7Java中的類、方法和變量試用一個簡單的類classCar{intcar_number;

voidset_number(intcar_num){car_number=car_num;}

voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}}classCarDemo{publicstaticvoidmain(Stringargs[]){CarDemocar=newCar();DemoCar.set_number(3838);DemoCar.show_number();}}Mycarnumberis3838441.7Java中的類、方法和變量類的繼承關(guān)系classCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}

voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}}classTrashCarextendsCar{intcapacity;voidset_capacity(inttrash_car_capacity){capacity=trash_car_capacity;}

voidshow_capacity();{System.out.println(“Mycapacityis:”+capacity);}}451.7Java中的類、方法和變量TrashCar中繼承了Car中的兩個方法classCarDemo{publicstaticvoidmain(Stringargs[]){TrashCarDemoTrashCar=newTrashCar();DemoTrashCar.set_number(4949);DemoTrashCar.set_capacity(20);DemoTrashCar.show_number();DemoTrashCar.show_capacity();}}

Car是父類,TrashCar是子類461.7Java中的類、方法和變量何時選擇繼承性?一個很好的經(jīng)驗:“B是一個A嗎?”如果是則讓B做A的子類.常犯的錯誤A有一個B嗎?例如讓汽車輪子成為汽車的子類是錯誤的471.7Java中的類、方法和變量類的嚴(yán)格定義及修飾字[類的修飾字]class類名稱[extends父類名稱]{….}public,abstract,final或者沒有[變量修飾字]變量數(shù)據(jù)類型變量名1,變量名2[=變量初值]…;[方法修飾字]方法的返回值類型方法名稱(參數(shù)1,參數(shù)2,…{…//方法的內(nèi)容}方法和變量的定義及修飾字public、protected、private481.8Java名空間及訪問規(guī)則每個類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。abstract類不能直接產(chǎn)生屬于這個類的對象final類不能被其他任何類所繼承(安全的考慮)public類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用.friendly(缺省)類只能被本包中的其它類使用491.8Java名空間及訪問規(guī)則變量和方法的修飾字public、protected、privatepublic:任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。classABC{publicintpub_i=5;

publicvoidshow)()(“pub_i”+pub_i);}501.8Java名空間及訪問規(guī)則classDemo{publicstaticvoidmain(Stringargs[]){ABCabc=newABC();System.out.println(“abc.pub_i”+abc.pub_i);abc.pub_i=10;abc.show();}}abc.pub_i=5pub_i=10;511.8Java名空間及訪問規(guī)則protected變量和方法如果一個類中變量或方法有修飾字protected,同一類,同一包可以使用。不同包的類要使用,必須是該類的子類可以存取變量或調(diào)用publicclassABC{protectedintpro_i=5;

protectedvoidshow()(“pro_i=”+pro_i;)}}

521.8Java名空間及訪問規(guī)則不同中的類不能使用classDEF{publicstaticvoidmain(Stringargs[]){ABCabc=newABC();(“_i=“+_i);abc.pub_i=10;abc.show();}}53importmytest.pack.ABC;classDEFextendsABC{publicstaticvoidmain(Stringagrs[]){DEFdef=newDEF();System.out.println(def.i);def.i=10;def.show();}}pro_i=5pro_i=101.8Java名空間及訪問規(guī)則不同包但是是子類541.8Java名空間及訪問規(guī)則private不允許任何其他類存取和調(diào)用friendly(前邊沒有修飾字的情況)在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法.551.8Java名空間及訪問規(guī)則當(dāng)子類中的變量名與父類的相同,原來的變量被遮蓋.classA{intdata_a=3;}classBextendsA{intdata_a=5;}classCextendsB{voidprint_out(){System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);System.out.println(“B.data_a=”+B.data_a);}}data_a=5A.data_a=3B.data_a=5classdemo{publicstaticvoidmain(Stringargs[]){Cc=newC();c.println_out();}}561.8Java名空間及訪問規(guī)則方法的覆蓋(overriding)和重載(overloading)子孫類中定義的方法和祖先類中某個方法同名,同參數(shù)行,則祖先類中的該方法被覆蓋.方法的重載是指一個對象的多態(tài)性,即多個方法用相同的名稱,但參數(shù)行不同.類voidshow(intint_num)voidshow(doubledouble_num)voidshow(nitnit_um,floatfloat_um)123571.8Java名空間及訪問規(guī)則到此為止finalfinal在方法之前,防止該方法被覆蓋.final在類之前,標(biāo)是該類不能被繼承final在變量之前,定義一個常量.屬于類的變量和方法staticstatic在變量或方法之前,

表明它們是屬于類的,classABCD{chardata;staticint_share_data;}classDemo{ABCDa,b,c,d}objectbchardataobjectcchardataObjectbchardatastaticintshare_dataobjectbchardata581.8Java名空間及訪問規(guī)則靜態(tài)變量在各實例間共享如果是public靜態(tài)變量,則其它類可以不通過實例化訪問它們靜態(tài)方法稱為類的方法,因此不用實例化即可調(diào)用(面向過程)一個對象的方法可以訪問對象的數(shù)據(jù)成員,盡管不屬于方法的局部變量一個類的方法只能訪問自己的局部變量591.8Java名空間及訪問規(guī)則例:不正確的引用classStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}錯誤信息:can’tmakeastaticreferencetononstaticvariable.為什么不正確?只有對象的方法可以訪問對象的變量.601.8Java名空間及訪問規(guī)則解決的辦法:1.將變量改稱類變量classStaticError{staticStringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}611.8Java名空間及訪問規(guī)則2.先創(chuàng)建一個類的實例classNoStaticError{publicstaticvoidmain(Stringargs[]){Stringmystring=“hello”;System.out.println(mystring);}}}621.9Java中的抽象類、接口和程序包抽象類是指不能直接被實例化的類,因此一般作為其它類的超類,與final類正好相反抽象類中的抽象的方法-在該類中定義但不在該類中提供實現(xiàn),由繼承類提供細(xì)節(jié)publicabstractclassSomeAbstractClass{voidmethod1(){System.out.println(“Hi,Java”);}voidmethod2();}定義抽象方法的類必須是抽象類.631.9Java中的抽象類、接口和程序包//已有兩個類Circle和Rectangle,完成相關(guān)參數(shù)的計算classCircle{publicintr;Circle(intr){this.r=r}//this指"這個對象的"publicintarea(){return3*r*r;}//取近似}classRectange{publicintwidth,height;//這里不需"this"Rectangle(intw,inth){width=w,height=h;}publicintarea(){returnwidth*height;}}641.9Java中的抽象類、接口和程序包假設(shè)有若干個Circle,以及若干個Rectangle,希望計算它們的總面積,直截了當(dāng)?shù)淖龇ㄊ菍⑺鼈兎謩e放到兩個數(shù)組中,用兩個循環(huán),加上一個加法,這種做法是不漂亮的如果還有其它形狀,triangle,ellipses等,上述方法顯得“累贅”,我們希望有一種統(tǒng)一的表示,例如用一個數(shù)組shape[],接受所有的形狀,然后用for(i=0;i<shape.length;i++){area_total+=shape[i].area();651.9Java中的抽象、接口和程序包abstractclassShape{abstractfloatarea();}classCircleextendsShape{publicintr;Circle(intr){this.r=r;}publicfloatarea(){return3.14*r*r;}}classSquareextendsShape{publicintwidth,height;Rectangle(intw,inth){width=w,height=h;}publicfloatarea(){returnwidth*height;}}661.9Java中的抽象類、接口和程序包利用接口可實現(xiàn)多重繼承(可同時實現(xiàn)多個接口)接口的作用和抽象類類似,指定原型,不直接定義方法的內(nèi)容.關(guān)鍵字implement用來實現(xiàn)方法,即在使用時要用給出方法的實際內(nèi)容接口中的方法和變量是public的interfaceStack{voidpush(objectx);objectpop();}classAextendsAppletimplementsStack{voidpush(objectx){…;//具體內(nèi)容

}objectpop(){…;//具體內(nèi)容}}

671.9Java中的抽象類、接口和程序包程序包:相當(dāng)于其它語言中的庫函數(shù)打包packageGraphics;classSquare{…;}classCircle{…;}classTriangle{…;}使用程序包中的類要用import命令.表示路徑,*表示使用包中的所有類;importjava.io.*;iojavaFileInputStream681.10對象的構(gòu)造函數(shù)使用new來做內(nèi)存配置classDemo1//數(shù)組的配置{publicstaticvoidmain(Stringargs[]){intarray[][];

array=newint[5][5];array[1][4]=5;}}

classmyClass//對象實體的產(chǎn)生{intdata=5;}classDemo2{publicstaticvoidmain(Stringargs[]){myClassobj;//建立一個引用

obj=newmyClass();System.out.println(obj.data);}}691.10對象的構(gòu)造函數(shù)Constructor和finalizerconstructor(構(gòu)造函數(shù)),在一個類中和類同名的方法叫構(gòu)造函數(shù).系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行.classPoint{intx,y;Point(){x=0;y=0;}Point(intnew_x,intnew_y){x=new_x,y=new_y;}}

classUsePoint{Pointpoint_A=newPoint();Pointpoint_B=newPoint(5,7);}701.10對象的構(gòu)造函數(shù)構(gòu)造函數(shù)應(yīng)包含哪些內(nèi)容?構(gòu)造函數(shù)多半定義一些初值或內(nèi)存配置工作一個類可以有多個構(gòu)造函數(shù)(重載),根據(jù)參數(shù)的不同決定執(zhí)行哪一個.如果程序中沒有定義構(gòu)造函數(shù),則創(chuàng)造實例時使用的是缺省函數(shù),它是一個無內(nèi)容的空函數(shù).711.10對象的構(gòu)造函數(shù)thisthis指自己這個對象this的作用是要將自己這個對象當(dāng)作參數(shù),傳送給別的對象中的方法.classThisClass{publicstaticvoidmain(){Bankbank=newBank();bank.someMethod(this);}}classCircle{intr;Circle(intr){this.r=r;}publicarea(){returnr*r*3;}}72super指這個對象的父類super用來引用父類中的方法及變量數(shù)據(jù).publicclassappleextendsfruits{publicapple(intprice){super(price);}}以上句子表示使用超類的構(gòu)造函數(shù)生成實例super必須是子類構(gòu)造器的第一條語句1.10對象的構(gòu)造函數(shù)73小結(jié)一個Java程序(包括小應(yīng)用程序)由若干個類組成,它們分布在由CLASSPATH指定的一個目錄中一個Java程序中只能由一個主類,并且與文件同名.CLASSPATH指定多個目錄,它們和起來被看成是這個目錄的根,根中的類構(gòu)成缺省包目錄樹中每個子目錄中的類的集合對應(yīng)Java一個包(package),子目錄的層次與包的記法的層次對應(yīng)74小結(jié)C:\javabinlibjavacjavaappletviewerjavasourcemyclass讓PATH包含…\java\binSETCLASSPATH=.;C:\...\myclassesimportjava.io.*;importjava.awt.Graphics;importmycalss.calculate.*;publicclasstest{}calculateABCclassA{}classB{}classC{}75小結(jié)名空間及訪問規(guī)則--package,class/object,member,局部變量--public,private,protected,default成員的可視性描述publicprotected缺省privateyesyesyesyesyesyesyesyesnoyes*nonoyesnonono同一類中同一包中不同包的子類中非子類也不同包76小結(jié)對象模型Java的類和對象(一般,抽象,接口)--繼承機(jī)制(單繼承,多實現(xiàn))static,import,final的含義和作用77小結(jié)避免在類中使用太多的基本類型privateStringsenderName;privateStringsenderStreet;privateStringsenderCity;privateStringsenderState;privateStringsenderZip;privateStringreceiverName;privateStringreceiverStreet;privateStringreceiverCity;privateStringreceiverState;privateStringreceiverZip;addresssenderaddressreceiver78第2章Java小應(yīng)用北京大學(xué)計算機(jī)系代亞非79第2章Java小應(yīng)用2.1所有小應(yīng)用程序的根源2.2小試身手2.3圖形操作2.4URL類2.5載入現(xiàn)有圖像文件2.6動畫效果2.7播放聲音2.8小結(jié)802.1所有小應(yīng)用程序的根源2.1.1小應(yīng)用的特點(diǎn)回憶一下小應(yīng)用程序的書寫格式

importjava.applet.*;publicclassMyAppletextendsApplet{;}applet都繼承自類,由Sun公司事先定義好了.每個小應(yīng)用都有一個主程序類,之前必須加上public.812.1所有小應(yīng)用程序的根源http://someLocation/file.html1.BrowserloadsURL<Html><Appletcode=….></Applet>2.BrowserloadsHTMLdocumentAppletclass3.BrowserloadsappletclassesLocation:http://someLocation/file.htmlLoading...4.Browserrunapplet822.1所有小應(yīng)用程序的根源Applet的限制appletBrowserSERVER本地程序fileSERVERlocalconnectionconnectionApplet被下載的與applet無關(guān)的本地方法832.1所有小應(yīng)用程序的根源2.1.2applet的生命周期paint()雖不在生命周期內(nèi),但它的作用相當(dāng)于applet的靈魂publicvoidinit()publicvoiddestroy()publicvoidstart()publicvoidstop()publicvoidpaint(Graphicsg)842.1所有小應(yīng)用程序的根源一個applet的可視周期initstartstopdestroy離開web頁面重新裝入或改變頁面大小或返回Web頁面852.1所有小應(yīng)用程序的根源有關(guān)paint()方法Applet本身是一個容器,因此任何輸出都必須用圖形方法paint()當(dāng)小應(yīng)用首次被裝載,以及每次窗口放大、縮小、刷新時都要調(diào)用paint方法paint()是由瀏覽器調(diào)用的,而不是由程序調(diào)用,當(dāng)程序希望調(diào)用paint方法時,用repaint命令paint方法的參數(shù)是Graphics類的對象g,它在內(nèi)paint(Graphicdg){。。。}862.1所有小應(yīng)用程序的根源AWTthread(waiting)update(){cleararaecallpaint()paint()repaint()Exposure872.2小試身手2.2.1起始頁上的時間和日期介紹兩個類:1.類名:Date

創(chuàng)建一個實例DatetimeNow=newDate();2.類名Font

創(chuàng)建一個實例FontmsgFont=newFont(“TimesRoman”,Font.ITALIC,30);0MonDec0714:23:50GMT+08:001998882.2小試身手

看下面的例子,想一想生命周期的四個方法哪去了?importjava.awt.*;importjava.util.Date;{DatetimeNow=newDate();FontmsgFont=newFont(“TimesRoman”,Font.ITALIC,30);publicvoidpaint(Graphicsg){g.setFont(msgFont);g.setColor(Color.blue);g.darwString(timeNow.toString(),5,50);}892.2小試身手2.2.2在起始頁中加入applethtml中有關(guān)的代碼

<APPLETCODE=“showdate.class”width=600height=80></APPLET>CODEBASE的作用當(dāng)class文件與起始頁文件不在同一個目錄下時,使用CODEBASE說明

<APPLETCODE=“showdate.class”width=600height=80>

CODEBASE=“\myjava\class”</APPLET>902.2小試身手<APPLETCODE=“showdate.class”width=600height=80>CODEBASE=“\myjava\class”</APPLET>C:\publicIndex.htmlmyjavaclassshowdatejavacodeC:\publicIndex.htmlmyjavaclassshowdatejavacode<APPLETCODE=“showdate.class”width=600height=80></APPLET>912.2小試身手ALIGN,HSPACE,VSPACEJavaapplet其它文字其它文字vspacehspace<APPLETCODE=“showdate.class”width=600height=80>vspace=100hspace=100</APPLET>922.2小試身手向applet傳遞參數(shù)的兩個步驟

1.在起始頁中要有<PARAM>標(biāo)簽

2.在applet中要有g(shù)etParameter方法在起始頁中有:<appletcode=showdatewidth=600heigt=80><paramname=remvalue=“時間是:”></applet>在applet中有:stringtitle=getParameter(rem);在顯示時間的命令中加入title:g.drawString(title+timeNow.toString(),5,50);932.2小試身手importjava.awt.*;importjava.util.Date;{DatetimeNow=newDate();Stringtitle;FontmsgFont=newFont(“TimesRoman”,Font.ITALIC,30);publicvoidinit(){title=getParameter(“rem”);if(title==null)title=“”;}publicvoidpaint(Graphicsg){g.setFont(msgFont);g.setColor(Color.blue);g.darwString(title+timeNow.toString(),5,50);}942.2小試身手例:利用一個可以顯示運(yùn)行字符串的類,顯示自己的字符串(htmlpara.html)<appletcode=htmlpara.classwidth=300heigh=200><paramname=MESSAGEvalue=”thisisatest"><paramname=FONTvalue="BOLD"><paramname=POINT_SIZEvalue=20></applet>952.2小試身手publicvoidinit(){ Stringparamete; parameter=getParameter("MESSAGE"); if(parameter!=null) message=parameter;parameter=getParameter("FONT"); if(parameter!=null) font_to_use=parameter;parameter=getParameter("POINT_SIZE");if(parameter!=null) point_size=Integer.parseInt(parameter);}962.3圖形處理圖形坐標(biāo)系統(tǒng)任何與繪圖有關(guān)的操作第一個要用的是類Graphics類的對象不是由new產(chǎn)生的,而是由系統(tǒng)或其他方式直接將生好的Graphics對象當(dāng)作方法的參數(shù),再交給程序設(shè)計者去處理.例如:paint(Graphicsg)xy0972.3圖形處理Graphics的方法paint(Graphicsg){g.clearRect(); g.copyArea();g.drawAre();g.drawLine();g.drawOval();g.drawRect();g.drawPolygon();g.fillArc();g.fillOval();g.fillPolygen();g.fillRect();g.getColor(); g.getFont()g.setFont();g.setColor(); g.getFontMetrics()g.fillRoundRect()}982.3圖形處理2.3.2字型和顏色的設(shè)置

字型設(shè)置的方法

Fontfont=newFont(“TimesRoman”,Font.ITALIC,24);g.setFont(font);在小應(yīng)用程序中顯示輸出的方法

g.drawString(String,intx,inty);g.drawChars(chardata[],intoffset,intlength,intx,inty);992.3圖形處理g.drawBytes(bytedata[],intoffset,intlength,intx,inty);例:g.drawString(“Thisisatest”,5,10);獲取字體的屬性

Fontfont=g.getFont();Font類中常用的方法

GetFamily() getName() getSize() getStyle()isItalic() isPlain() isBold() toString() 1002.3圖形處理importjava.awt.Graphics;importjava.awt.Font;{Fontfn=newFont("TimesRoman",Font.ITALIC,20); publicvoidpaint(Graphicsg) {g.setFont(fn); g.drawString(”Fontdemo”,5,10);}}Fontdemo1012.3圖形處理獲取更詳細(xì)的數(shù)據(jù) 請查閱有關(guān)FontMetrics類的方法

fontMetrics=getFontMetrics(font);FontMetrics中比較重要的方法有:stringWidth,charWidth,getAscent,getDescent,getLeading,getHeigh1022.3圖形處理

顏色的調(diào)整Color對象的使用創(chuàng)造自己的顏色:Colormycolor=newColor(intred,intblue,intgreen);g.setColor(Color.yellow)g.setColor(mycolor);例:隨機(jī)產(chǎn)生顏色,并畫圓1032.3圖形處理importjava.awt.Graphics;importjava.awt.Color;publicclassdrawcircleextendsjava.applet.Applet{ publicvoidpaint(Graphicsg){ intred,green,blue,x; for(x=0;x<370;x+=30){red=(int)Math.floor(Math.random()*256); green=(int)Math.floor(Math.random()*256); blue=(int)Math.floor(Math.random()*256); g.setColor(newColor(red,green,blue)); g.fillOval(x,0,30,30); }}}1042.4URL類2.4.2構(gòu)造URL類(全名java.lang.URL)絕對URL的構(gòu)造方法:URL(Stringspec)例:URLurl=newURL(:///cv/index.html”)相對URL的構(gòu)造方法:某絕對地址在該目錄下有兩個文件

1052.4URL類URLbase=newURL(“://”);URLurl1=new(base,“mywork.html”);URLurl2=new(base,“mywork.html”);其他URL的構(gòu)造方法:URLurl=newURL(“”,“”,“/~dyf/test.html”);1062.4URL類2.4.3獲取小應(yīng)用程序HTML頁面的URL和小應(yīng)用程序本身的URLURLhtml=getDocumentBase();System.out.print(html);URLcodebase=getCodeBase();System.out.print(codebase);瀏覽器服務(wù)器htmlappletwebpage1072.4URL類2.4.4URL異常(MalformedURLException)

當(dāng)創(chuàng)建URL時發(fā)生錯誤,系統(tǒng)會產(chǎn)生異常

try{URLurl=newURL(str);}catch(MalformedURLException(e){DisplayErrorMessage();}2.4.5URL類的基本方法

StringgetProtocol(),StringgetHost(),inggetPort(),StringgetFile(),StringgetRef()1082.4URL類構(gòu)造URL的實例import.URL;import.MalformedURLException;publicclassTest{URLurl1,url2,url3;voidtest(){try{url1=newURL(“file:/D:/image/example.gif”);url2=newURL(“:///cv/”);url1=newURL(url2,“hit.gif”);}catch(MalformedURLExceptione);//處理例外}}}1092.5載入現(xiàn)有圖像文件Image類java支持gif和jpg兩種格式的圖像圖像文件的URL:URLpicurl=newURL(“:///Applet/img1.gif”);取一幅圖像構(gòu)成圖像對象Imageimg1=getImage(picurl);Imageimg2=getImage(getCodeBase(),“img2.gif”);1102.5載入現(xiàn)有圖像文件顯示一幅圖像:g.drawImage(img1,x,y,this);g.drawImage(img1,x,y,Color.red,this);

g.drawImage(image1,x,y,x2,y2,Color.red,this);規(guī)定背景規(guī)定尺寸1112.5載入現(xiàn)有圖像文件完整的過程不要忘記AWT包定義Image對象了嗎?指定圖像的URL了嗎?把圖像取出來吧.還記得畫圖像用什么方法和命令嗎?在類中在init0中在paint0中1122.5載入現(xiàn)有圖像文件importjava.applet.*;importjava.awt.*;publicclassimageextendsApplet{ Imageimg;publicvoidinit(){img=getImage(getCodeBase(),"img0001.gif");}publicvoidpaint(Graphicsg){intwidth=img.getWidth(this); intheight=img.getHeight(this);g.drawRect(52,52,width+30,height+30);g.drawImage(img,57,57,width+20,height+20,this);}}1132.6動態(tài)效果線程的應(yīng)用2.4動態(tài)效果線程的應(yīng)用什么是線程?

線程是執(zhí)行中的程序中的單個順序控制流.Java支持多線程開始顯示進(jìn)度引出最后結(jié)果數(shù)學(xué)運(yùn)算線程1線程21142.6動態(tài)效果線程的應(yīng)用靜態(tài)的情況importjava.applet.*;importjava.awt.Graphics;publicclassmagueeextendsApplet{ publicvoidpaint(Graphicsg) { g.drawString("Hello,Java!",0,0); }}1152.6動態(tài)效果線程的應(yīng)用動態(tài)的情況(不是多線程)publicvoidinit(){ x=size().width; y=size().height/2; width=x;}publicvoidpaint(Graphicsg){while(true){ g.drawString("Hello,Java!",x,y); x-=10; if(x<0) x=width;}} 1162.6動態(tài)效果線程的應(yīng)用實現(xiàn)一個線程讓Applet類去實現(xiàn)Runable接口,創(chuàng)建一個線程類改寫方法start,在其中產(chǎn)生一個新的線程來工作改寫stop方法,在其中編寫結(jié)束線程的程序代碼引入新的方法,將分給線程的工作寫到run中1172.6動態(tài)效果線程的應(yīng)用第一步:實現(xiàn)Runable接口publicclassxcextendsjava.applet.AppletimplementsRunnable{Threadsmallthread=null;…}Thread是一個類,只有是它的實例才能具有線程的功能主函數(shù)中要定義一個線程變量1182.6動態(tài)效果線程的應(yīng)用第二步:改寫方法startpublicvoidstart(){if(smallthread==null)

{smallthread=newThread(this);

smallthread.start();//從現(xiàn)在開始程序由兩個線程在執(zhí)行

}}第三步:改寫stop方法publicvoidstop(){smallthread.stop();//停止線程

smallthread=null;//釋放線程對象}1192.6動態(tài)效果線程的應(yīng)用第四步:新的方法run將讓線程要做的事放run中publi

溫馨提示

  • 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

提交評論