




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第一章HelloJavaJava語言及其家族的發(fā)展史;主要的運行平臺;程序運行環(huán)境的安裝;一個簡單的java程序及其運行;Java語言基礎(chǔ)知識;面向?qū)ο蟪绦蛟O(shè)計思想。2Historyofjava--24頁Machinelanguages:stringsofnumbers
Assemblylanguages:English-likeabbreviations
High-levellanguages:likeeverydayEnglishandmathematicalnotations
C,C++andjava+1300042774
+1400593419
+1200274027loadbasepay
addoverpay
storegrosspaygrosspay=basepay+overtimepay3DifferencesinC,C++andjava不再有#include
和#define
等于處理功能;不再有structure,union及typedef;不再有函數(shù)、不再有指針、不再有多重繼承(inherit);不再有g(shù)oto;不再有操作符重載(OperatiorOverloading);取消自動類型轉(zhuǎn)換,要求強制轉(zhuǎn)換。結(jié)論:Java=“C++”-”復(fù)雜性和奇異性”+“安全性和可移植性”4Historyofjava1991:Oaklanguage;1994:OaknamedJava;1995:Java正式發(fā)布,Microsoft,IBM,Netscape,NovellApple,DEC紛紛購買使用權(quán).1996:Sun成立Javasoft分公司5主要的運行平臺J2EE(Java2EnterpriseEdition)—企業(yè)計算J2SE(Java2StandardEdition)—桌面計算J2ME(Java2MicroEdition)—嵌入計算6程序運行環(huán)境的安裝—J2SE運行文件“jdk-1_5_0_06-windows-i586-p.exe”,直到安裝成功。運行文件“UltraEdit_11.101_SC(1).exe”安裝java源程序編寫工具。打開UltraEdit_11.101_SC(1).exe,我們編寫一個簡單的java小程序。7FirstPrograminJava:PrintingaLineofText//Text-printingprogram.publicclasswelcome{
//mainmethodbeginsexecutionofJavaapplicationpublicstaticvoidmain(Stringargs[]){System.out.println("WelcometoJavarogramming!");}//endmethodmain}//endclassWelcome8程序運行環(huán)境的安裝安裝完JDK后,
命令行輸入cmd程序運行過程是:
先編譯javacWelcome.java->
成功后會生成Welcome.class可執(zhí)行文件,我們再輸入javaWelcome即可執(zhí)行這個文件?!踩鐖D〕9程序運行環(huán)境的安裝如果發(fā)生錯誤,請檢查環(huán)境變量有沒有設(shè)置好。先觀察一下安裝jdk的目錄結(jié)構(gòu):C:\javabinlibclasses.zipjavacjavaappletviewer用戶類文件所在目錄myclasses當(dāng)前目錄10程序運行環(huán)境的安裝環(huán)境變量具體設(shè)置
方法是:EditPathVariable=\jdkinstallfold\bin;11程序運行環(huán)境的安裝AddCLASSPATHVariable
=.;\jdkinstallfold\lib;
\myjavaprogramclass12Java語言的運行時環(huán)境:java虛擬機25頁JavasourcecodeMachinecodeJavabytecodeBytecodeinterpreterBytecodecompilerJavacompiler13JDK1.2(~V1.3.0,V1.3.1,V1.4.2,V1.5.0)Jcreator:圖形化的Java程序的編輯環(huán)境
Forte:Sun功能強大的集成開發(fā)環(huán)境
Jbuilder:圖形化,客戶端與服務(wù)器端
WebLogic:適于開發(fā)服務(wù)器端
VisualAge:與Webshpere結(jié)合,也適于客戶端
Symantec的VisualCafe、Oracle的
JDeveloper和OracleApplicationServerJava常用開發(fā)環(huán)境14例題1.1//********************************//Lincoln.javaAuthor:Lewis/Loftus////Demonstratesthebasicstructureofajavaapplication//**********************************************************PublicclassLincoln{////Printsapresidentialquote.//Publicstaticvoidmain(String[]args){system.out.println(“AquotebyAbrahamLincoln”);system.out.println(“whateveryouare,beagoodone.”);}}Java應(yīng)用程序舉例15輸出結(jié)果:
AquotebyAbrahamLincolnWhateveryouare,beagoodman注意:
1:程序的開始幾行是注釋,由符號//開始到一行結(jié)束
2:所有的Java程序都有一個main方法,程序的執(zhí)行從main方法開始,main中包含的語句按照順序一條一條地執(zhí)行,直到這個方法結(jié)束。164.1注釋
注釋是獨立于代碼的,應(yīng)當(dāng)表現(xiàn)程序員編寫程序的初衷或者意圖。注釋的內(nèi)容可以是任何文本,注釋將被計算機忽略,不影響程序的執(zhí)行。Java有三種注釋的方式:1。//
注釋內(nèi)容由//一直到此行結(jié)束2。/*和*/定義一個注釋塊3。/**開始,*/結(jié)束這種注釋方法可用來自動產(chǎn)生文檔17標(biāo)識符和保留字--20頁標(biāo)識符(Identifier):以字母(letter),下劃線(underline)(_),美元符($)開始的一個字符序列,后面可以跟字母,下劃線,美元符,數(shù)字(number)。Java對大小寫敏感,標(biāo)識符命名應(yīng)該具有描述性和可讀性。例如:Identifier,userName,User_Name,_sys_val,$change,2mail,room#,classrightrightwrong18標(biāo)識符和保留字--20頁保留字(reservedword):特殊的有意義的標(biāo)識符。abstract,break,byte,boolean,catch,case,class,char,continue,default,double,do,else,extends,false,final,float,for,finally,if,import,implements,int,interface,instanceof,long,length,native,new,null,package,private,protected,public,return,switch,synchronized,short,static,super,try,true,this,throw,throws,threadsafe,transient,void,while19空白符--22頁空白符用于分隔程序中的單詞和符號。合理使用空白符可以使程序更加可讀和易懂。見例1.2,1.320面向?qū)ο缶幊蘡lassCar{intcolor_number;intdoor_number;intspeed;
voidbrake(){…}voidspeedUp(){…};voidslowDown(){…}}
計算機中的對象的原型
現(xiàn)實生活中的對象21類(class)和對象(object)類是描述對象的“基本原型”,類沒有存儲空間。對象是類的一個實例,每個對象都有自己的存儲空間,它由一組結(jié)構(gòu)化的數(shù)據(jù)(variables)和在其上的一組操作(methods)構(gòu)成。variablesmethods22封裝(encapsulation)什么是封裝?封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù)。私有數(shù)據(jù)
方法封裝實際上是將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。
方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)23繼承(inheritance)子類是作為另一個類的擴充或修正所定義的一個類.bicycle(superclass)父類MountainbikesRacingbikesTandembikessubclass(子類)24繼承(inheritance)繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.一個類可以通過繼承由其他類產(chǎn)生,而一個類本身還可以派生出更多的類,這樣就建立起類層次結(jié)構(gòu)。classCar{intcolor_number;intdoor_number;intspeed;
push_break(){…}add_oil(){…}}
classTrash_Car
extendsCar{doubleamount;fill_trash(){…}}25多態(tài)性(Polymorphism)多態(tài)性指用一種統(tǒng)一的方式引用有繼承關(guān)系的不同類型的對象。Java是一種面向?qū)ο缶幊陶Z言,對象是java程序中最基本的實體。本課程的重點就是學(xué)習(xí)java的面向?qū)ο蟪绦蛟O(shè)計思想。學(xué)習(xí)方法:認真聽課,多上機實踐,及時鞏固。26課后自練:安裝java編程環(huán)境jdk1.5,并正確配置環(huán)境變量。鍵入教材17頁例1.1程序并在java虛擬機上編譯執(zhí)行。試在你的機器上練習(xí)36頁的pp1.1,pp1.2,pp1.7,pp1.8.主要內(nèi)容1:字符串2:變量與賦值3:基本數(shù)據(jù)類型4:表達式5:數(shù)據(jù)類型轉(zhuǎn)換6:交互程序7:圖形8:JavaApplet9:繪圖282.1字符串字符字符是指用單引號括起來單個字符,這里的字符不是指占1個字節(jié)的ASCII字符,而是指占2個字節(jié)的Unicode字符。因為Unicode被設(shè)計用來處理現(xiàn)在世界上所有書面語言中的字符,所以一個漢字也是被當(dāng)作一個字符來處理的。29
字符串指的是字符的序列,有兩種類型的字符串:一種是創(chuàng)建以后不需要改變的,稱為字符串常量,在Java中,String類用于存儲和處理字符串常量;另外一種字符串是創(chuàng)建以后,需要對其進行改變的,稱為字符串變量。一個字符串是一個對象,由String類定義。在Java中常以雙引號作為字符串的定界符。字符串30
System.out.println(“whareveryouare,beagoodman.”);注意:
System.out對象代表一個輸出設(shè)備或者文件,默認的輸出設(shè)備是顯示器屏幕。2.1.1println和print方法println方法為我們執(zhí)行了一個服務(wù),向輸出設(shè)備發(fā)送一個println消息,請求輸出某個文本消息。Println與print的相同與區(qū)別相同點:都是向輸出對象發(fā)送一個消息,請求輸出某中消息不同點:println在輸出消息后換行,print保持光標(biāo)在當(dāng)前位置31當(dāng)輸出長度大于一行的字符串時,使用字符串拼接。方法:使用字符串拼接運算符號“+”將兩個字符串拼接起來例如:“Theonlystupidquestionis”+”theonethat’snotasked.”2.1.2字符串拼接輸出結(jié)果:Theonlystupidquestionistheonethat’snotasked.注意:如何區(qū)分符號“+”的作用如果“+”運算符的兩個操作數(shù)中至少有一個是字符串,則執(zhí)行字符串拼接322.1.3轉(zhuǎn)義序列
在Java中使用轉(zhuǎn)義序列來表示特殊的字符。
通常一個轉(zhuǎn)義序列以反斜杠(\)開頭,表明該字符或者后續(xù)字符應(yīng)當(dāng)用特殊的方式來解釋。如輸出:’’則\”33342.2變量與賦值2.2.1變量變量代表保存數(shù)據(jù)的內(nèi)存單元,變量名是內(nèi)存單元的符號地址。一行變量聲明由類型說明符及后續(xù)的變量名列表組成。每一個變量可以在聲明時用指定的表達式進行初始化。如果聲明中使用了final修飾符,則所聲明的標(biāo)識符命名為常量,并且一旦賦值就不可以更改。一行變量聲明語句可以同時聲明多個具有相同類型的變量。聲明同時可以根據(jù)需要對變量進行初始化。35Java中使用賦值運算符“=”為變量賦值基本格式是:
標(biāo)識符=表達式過程:基本賦值語句用賦值運算符號將表達式的計算結(jié)果保存到指定的標(biāo)識符所代表的內(nèi)存單元中,該標(biāo)識符代表的內(nèi)存單元通常是一個變量。
2.2.2賦值語句注意:不允許將一個值賦給一個類型不一致的變量。例如:
sides=10;36常量:
常量的值在整個程序執(zhí)行過程中是不能修改的。與變量不同的是常量在存在期間保存一個特定的值。2.2.3常量在Java中使用保留字fianl來定義一個標(biāo)識符為常量。通常用大寫字母命名一個常量以區(qū)別普通變量,并且常量名的各單詞之間用下劃線分隔。例如:finalintMAX_INT=100
常量初始化賦值后,如果試圖修改常量的值,則編譯器會產(chǎn)生錯誤信息。
372.3基本數(shù)據(jù)類型分四大類:邏輯、字符、整數(shù)和浮點共8種基本數(shù)據(jù)類型邏輯類型:boolean字符類型:char整數(shù)類型:byte,short,int和long浮點類型:float和double
各種數(shù)值類型的差別在于保存不同數(shù)據(jù)類型的數(shù)時占用內(nèi)存空間大小不同,由此決定了不同數(shù)據(jù)類型所能表示的數(shù)的取值范圍。38在Java編程語言中有四種整數(shù)類型,每種類型可使用關(guān)鍵字byte,short,int和long中的任意一個進行聲明。所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字,不存在無符號整數(shù)。整數(shù)類缺省為int類型,如在其后有一個字母“L”表示一個long值(也可以用小寫“l(fā)”)。由于小寫“l(fā)”與數(shù)字“1”容易混淆,因而,建議大家采用大寫“L”2.3.1整數(shù)類byte,short,int,long四種整數(shù)類型的存儲空間長度、能表示的范圍是不一樣的,具體范圍見后表。3940
在Java編程語言中有兩種浮點類型:float和double。
如果一個數(shù)包括小數(shù)點或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)為浮點數(shù)。如果不明確指明浮點數(shù)的類型,浮點數(shù)缺省為double。下面是幾個浮點數(shù):
3.14159
(double型浮點數(shù))
6.56f
(float型浮點數(shù))
2浮點類double,float
在兩種類型的浮點數(shù)中,float為32位(單精度),double為64位(雙精度)。也就是說double類型的浮點數(shù)具有更高的精度。412.3.2字符型字符型是一種計算機使用和管理的基本數(shù)據(jù)類型。單個字符可以作為一項數(shù)據(jù)。
在Java中,用單引號表示字符常量。字符串常量用雙引號作為定界符號。而String不是Java的基本數(shù)據(jù)類型,而是一個類。注意:一個數(shù)字作為一個字符和作為一個數(shù)值的差別。Java使用16為Unicode字符集來表示字符。422.3.3布爾型Java使用boolean定義布爾變量。布爾型變量包括兩種有效值:true和false
布爾變量通常用于判斷一個具體條件是否為真,也可以用于標(biāo)識任何一種有兩種狀態(tài)的情況。
一個布爾型值不能夠轉(zhuǎn)換為其他任何一種類型的值,反之亦然。432.4表達式表達式由一個以上的運算符和操作數(shù)按一定規(guī)則組合而成,通常用于完成計算。2.4.1算術(shù)運算符算術(shù)運算符包括加號(+)、減號(-)、乘號(*)、除號(/)、取模(%)、自增運算符(++)、自減運算符(--)等。在算術(shù)運算中,有以下值得注意的地方:(1)算術(shù)運算符的原則是先乘除、再加減,括號優(yōu)先。(2)整數(shù)除法會直接砍掉小數(shù),而不是進位44(3)與C語言不同,對取模運算符%來說,其操作數(shù)可以為浮點數(shù)。如:37.2%10=7.2。(4)Java也用一種簡寫形式進行運算,并同時進行賦值操作。例如,為了將10加到變量x,并將結(jié)果賦給x,可用:x+=10。(5)Java對加運算符進行了擴展,使它能夠進行字符串的連接,如"abc"+"def",得到串"abcdef"。
45(6)前綴++、--與后綴++、--的區(qū)別:
++i(前綴++)在使用i之前,使i的值加1,因此執(zhí)行完++i后,整個表達式和i的值均為i+1;
i++(后綴++)在使用i之后,使i的值加1,因此執(zhí)行完i++后,整個表達式的值為i,而i的值變?yōu)閕+1。
--i在使用i之前,使i的減1,因此執(zhí)行完--i后,整個表達式和i的值均為i-1;
i--在使用i之后,使i的減1,因此執(zhí)行完i--后,整個表達式的值為i,而i的值變?yōu)閕-1。462.4.2運算符優(yōu)先級算術(shù)運算符遵循代數(shù)運算相同的運算規(guī)則。乘、除法和求余運算符有相同的運算優(yōu)先級,優(yōu)先級別高于加減法。具有相同優(yōu)先級別的運算符按照從左到右的順序執(zhí)行。在表達式中,可以使用括號來強制性改變運算符的優(yōu)先順序。當(dāng)括號嵌套使用時,表達式的計算從嵌套最內(nèi)層的括號開始。賦值運算符的運算優(yōu)先級比算術(shù)運算符的優(yōu)先級別低。注意引用不改變變量的值:如:sum=count+totalsum=sum+1
47482.5數(shù)據(jù)類型轉(zhuǎn)換2.5.1類型轉(zhuǎn)換的安全性基本數(shù)據(jù)類型間的類型轉(zhuǎn)換可分為兩類:
擴展類型轉(zhuǎn)換和壓縮類型轉(zhuǎn)換
擴展類型轉(zhuǎn)換是安全的類型轉(zhuǎn)換,因為在進行類型轉(zhuǎn)換時將使用相等的或者更大的存儲空間來保存類型轉(zhuǎn)換后的值,不會丟失信息。
壓縮類型轉(zhuǎn)換是使用更少的存儲空間來保存類型轉(zhuǎn)換后的值,某些信息被舍棄。49在Java中,數(shù)據(jù)轉(zhuǎn)換的方式有三種:1:賦值類型轉(zhuǎn)換。當(dāng)將一個類型的變量賦給另一種類型的變量時,該值將會被轉(zhuǎn)換為新類型的值。只能進行擴展類型轉(zhuǎn)換。例如:money=dollars2:低級別類型向高級別類型的自動類型轉(zhuǎn)換當(dāng)某種運算符為了進行運算需要修改其操作數(shù)類型時,將進行自動類型轉(zhuǎn)換。2.5.2數(shù)據(jù)類型的轉(zhuǎn)換技術(shù)50
強制類型轉(zhuǎn)換的格式是:(數(shù)據(jù)類型)變量名
經(jīng)過強制類型轉(zhuǎn)換,將得到一個在“()”中聲明的數(shù)據(jù)類型的數(shù)據(jù),該數(shù)據(jù)是從指定變量所包含的數(shù)據(jù)轉(zhuǎn)換而來的。值得注意的是,指定變量本身不會發(fā)生任何變化。將占用位數(shù)較長的數(shù)據(jù)轉(zhuǎn)化成占用位數(shù)較短的數(shù)據(jù)時,可能會造成數(shù)據(jù)超出較短數(shù)據(jù)類型的取值范圍,造成“溢出”。如:
longi=10000000000;intj=(int)i;
因為轉(zhuǎn)換的結(jié)果已經(jīng)超出了int型數(shù)據(jù)所能表示的最大整數(shù)(4294967295),造成溢出,產(chǎn)生了錯誤。3:強制類型轉(zhuǎn)換512.6交互程序Scanner類是標(biāo)準(zhǔn)的Java類庫的類,提供了一些從不同數(shù)據(jù)源讀取各種類型數(shù)據(jù)的方法。首先必須創(chuàng)建Scanner類對象以便應(yīng)用其方法。
Scannerscan=new
Scanner(System.in)Scanner類的next方法將下一個輸入數(shù)據(jù)項作為字符串讀入并返回該字符串。如果輸入數(shù)據(jù)由一系列用空格分隔的單詞組成,每次調(diào)用next函數(shù)將返回一個單詞。Nextline方法讀取所有數(shù)據(jù)直到輸入行結(jié)束,并將所讀的數(shù)據(jù)作為一個字符串返回。
例題2.8
例題2.9522.7圖形基本概念像素:構(gòu)成一副圖形的基本元素。通過保存每個像素的顏色值來保存一副完整的圖形。數(shù)字化以后的圖形可以通過重組像素點來重建,表示圖形用的像素越多,圖形越清晰和真實。表示圖形所用的像素點數(shù)稱為圖形的分辨率。顯示器所能顯示的像素點數(shù)稱為顯示器分辨率。
53
圖像的每個像素點都能映射到顯示器屏幕上的像素點上。與傳統(tǒng)坐標(biāo)相比較,java使用一套相對簡單的坐標(biāo)系統(tǒng)。坐標(biāo)的圓點在繪圖區(qū)的左上角,所有的可見坐標(biāo)都是正值。Java語言使用一套相對簡單的坐標(biāo)系統(tǒng),所有的值都是正的。2.7.1坐標(biāo)系統(tǒng)YX(0,0)11240(112,40)542.7.2顏色表示方法黑白圖形的一個像素用1位二進制位表示(white=0,black=1)彩色圖片需要更多信息,因此產(chǎn)生了一些方法來表示它。三基色表示法。每種顏色可以由三種基本顏色表示出來:
紅色(Red),綠色(Green),藍色(Blue)Java用三個數(shù)字表示顏色值,稱為RGB
用一個字節(jié)(8位)保存一個基色值,取值范圍是0—255
一個基色值可以表示這種基色的256級亮度。每種基色的亮度級的合成決定像素點的最終顏色。55Java使用Color類(包含在java.awt中),定義和管理顏色,Color類的每個對象代表一種顏色。Color類的每個對象代表一種顏色,該類創(chuàng)建了幾個實例用于提供一組預(yù)定義的顏色,如下所示:ObjectColor.blackColor.blueColor.cyanColor.orangeColor.whiteColor.yellowRGBValue0,0,00,0,2550,255,255255,200,0255,255,255255,255,0562.8Javaapplet
Java程序分為兩類:Java小應(yīng)用程序(javaapplet)和Java應(yīng)用程序。Java應(yīng)用程序是一個擁有主方法的單獨程序。Javaapplet是一種可以通過Web軟件下載執(zhí)行的可執(zhí)行程序。2.8.1Javaapplet的基本概念使用Javaapplet是為了將Javaapplet嵌入HTML文檔,通過網(wǎng)絡(luò)傳送并使用瀏覽器執(zhí)行。Javaapplet可以通過JDK提供的appletviewer,來解釋執(zhí)行。Javaapplet沒有主方法。但是還有一些特殊的方法用于構(gòu)建applet。57paint方法在applet繪圖的時候?qū)⒆詣诱{(diào)用,繪制圖像內(nèi)容。Pain方法接收的參數(shù)是一個Graphics對象。一個Graphics對象定義了用于交互的繪圖上下文環(huán)境,該環(huán)境將作為整個applet窗口環(huán)境。Graphics類有繪圖的方法提供給用戶使用。58Javaapplet在使用之前必須編譯成字節(jié)碼格式,然后將字節(jié)碼鏈接到一個HTML文件并通過Web進行傳送,一旦達到目的地,嵌入到Web瀏覽器中的Java解釋器將用于執(zhí)行Javaapplet.
要使一個Javaapplet能通過Web傳送并由Web瀏覽器執(zhí)行,必須在超文本標(biāo)記語言文檔中引用applet。。2.8.2利用Web執(zhí)行Java
applet59<html><head><title>TheEinsteinApplet</title></head><body><appletcode="Einstein.class"width=350height=175></applet></body></html>注意:1:applet標(biāo)記規(guī)定存放在Einstein.class文件中的字節(jié)碼由網(wǎng)絡(luò)進行傳送。在計算機中執(zhí)行。同時規(guī)定了applet的高度和寬度。2:applet引用的是字節(jié)碼文件,而不是源程序。602.9繪圖
Java提供許多支持繪圖功能的類,Graphics類其中之一。該類包含在java.awt包中,主要提供了各種方法繪制圖形,包括線段、矩形和橢圓等。Graphics類的方法允許指定是否需要填充圖形。一個非填充的圖形只顯示圖形的輪廓線,圖形是透明的,可以看到底層的任何圖形。一個填充的圖形邊界是填實的。繪圖主要方法見P65611:畫直線XY102015045page.drawLine(10,20,150,45);page.drawLine(150,45,10,20);or622:畫矩形XYpage.drawRect(50,20,100,40);502010040633:畫橢圓XYpage.drawOval(175,20,50,80);175205080boundingrectangle64每一個繪圖組件上有一個背景色。每一個圖形上下文環(huán)境有一個當(dāng)前的前景色。二者都可以清晰地看到??梢杂蒅raphics類的setColor方法設(shè)置前景色,由setBackground方法設(shè)置背景色。見例題2.11
1:外接矩形用于定義曲線圖形的位置和大小。2:一段弧可以看成橢圓的一段,要畫一段弧,需要指定這段弧所屬的橢圓和要畫的該橢圓上的弧段。3:弧段的起點由起始角定義,結(jié)束點由弧角定義。注意:65建立對象String類包Random類Math類主要內(nèi)容格式化輸出枚舉型包裝類組件和容器嵌套的面板圖像663.1建立對象
在Java中,變量名代表一個基本數(shù)據(jù)類型值或者是一個對象.
類名能被用于定義對象變量。
Stringtitle;上述語句并不創(chuàng)建任何對象。一個對象引用變量不能保存對象本身,而是保存該對象的地址。對象本身必須單獨創(chuàng)建。67通常我們使用new關(guān)鍵字來建立一個對象。建立一個對象稱為對相應(yīng)“類”的實例化或?qū)ο蠡?。Stringtitle=newString("JavaSoftwareSolutions");調(diào)用了String的構(gòu)造函數(shù),這一函數(shù)建立一個String類型的對象title,并對其初始化為“JavaSoftwareSolutions”
使用new運算符返回新對象的地址。68分析下面兩條聲明語句:經(jīng)過聲明的變量經(jīng)過初始化后:“JamesGosling"namenum142intnum;Stringname;num=42;name=newString(“JamesGosling”);69類對象初始化以后,可以使用”.”運算符來引用對象的方法。該運算符直接跟在對象名后,接著給出被調(diào)用的方法。
count=title.length()有些方法完成后產(chǎn)生返回值,有些方法則不產(chǎn)生返回值,方法的返回值可以用于表達式或者任務(wù)。一個方法的調(diào)用可以看成是讓對象執(zhí)行某種服務(wù)。70在使用一個對象引用變量之前,必須完成初始化,使之指向一個有效的對象,不然系統(tǒng)將發(fā)出錯誤信息??梢詫ο笠米兞吭O(shè)置為null,表示一個對象引用變量不指向任何對象。使用new運算符建立對象后,將調(diào)用類的構(gòu)造方法初始化新對象。構(gòu)造方法是一種特殊的方法,方法名與類名相同。幾點說明:
對象引用變量保存的是對象的地址,可以看成是指向?qū)ο蟠鎯卧闹羔槨?1在聲明時初始化對象,可以將聲明對象引用變量和創(chuàng)建對象合并。如:
Stringtitle=newString(“Java”);對于String對象,無須顯式地使用new運算符以及調(diào)用構(gòu)造方法來創(chuàng)建對象,如:
StringCity=“BeiJing”;
723.1.2別名機制對于簡單數(shù)據(jù)類型:賦值語句將num1中的值賦值一份賦給num2變量。num138num296Before:num2=num1;num138num238After:73對于對象類型:賦值語句復(fù)制的僅僅的對象的引用地址。name2=name1;name1name2Before:"SteveJobs""SteveWozniak"name1name2After:"SteveJobs"74別名——多個對象引用變量指向同一個對象。多個對象引用變量互為別名。一個對象能夠通過多個對象引用變量進行訪問。別名機制非常有用,但是要小心處理。當(dāng)利用其中任意一個引用改變其所指的對象時,同時也使所有的引用指向的對象發(fā)生了改變。75垃圾收集當(dāng)對象的最后一個引用丟失,它不能被程序再使用。這個對象沒有任何使用價值,成為垃圾。Java自動執(zhí)行垃圾對象回收,將其所占的內(nèi)存空間釋放給系統(tǒng),以便資源重用。76
一個String對象一旦建立后,它的長度和值是不可改變的。因而稱一個String對象是不可變的。String類提供了方法(P77)可以返回新的String對象,這些新對象是原來對象字符值修改的結(jié)果。但是可以利用String類提供的方法返回新的String對象,這些新對象是對原來對象字符串修改的結(jié)果。
3.2String類77字符索引String類方法使用字符索引的概念處理字符串。一個字符可以由該字符在字符串中的位置(即索引)來確定?!八饕睆?開始,往右遞增。例題3.1783.3包類庫由一組支持程序開發(fā)的類組成。Java標(biāo)準(zhǔn)類庫是開發(fā)環(huán)境的一部分。有些類不是Java語言的內(nèi)建部分,而是Java標(biāo)準(zhǔn)類庫類庫可以從第三方軟件商獲得,也可以自己編寫。類庫由幾組相關(guān)的類族構(gòu)成,成為JavaAPI(應(yīng)用程序接口)。Java標(biāo)準(zhǔn)類庫的類被劃分為包,每個類屬于一個具體的包。見P80圖3.279PackagesPackagejava.langjava.appletjava.awtjavax.swingjava.utiljavax.xml.parsersPurposeGeneralsupportCreatingappletsforthewebGraphicsandgraphicaluserinterfacesAdditionalgraphicscapabilitiesNetworkcommunicationUtilitiesXMLdocumentprocessing80編寫Java程序時,java.lang包中的類自動成為可用類如果要使用其他包中的類,則必須完整地聲明相應(yīng)類的引用。
java.util.Scanner或者使用import導(dǎo)入該類,然后使用該類名。
importjava.util.Scanner;如果來自兩個包的兩個類的名稱相同,則要在程序中寫出完整的類引用名。import聲明可以使用”*”,表示程序可能使用指定包中的任何類。例如:importjava.util.*3.3.2Import聲明813.4Randam類該類是java.util包中的類,模擬一個偽隨機數(shù)發(fā)生器。一個偽隨機數(shù)發(fā)生器通過執(zhí)行復(fù)雜計算來產(chǎn)生模擬一個隨機數(shù)。偽隨機數(shù)發(fā)生器基于一個種子,在執(zhí)行一系列復(fù)雜計算后,將會產(chǎn)生模擬隨機數(shù)。
P82圖3.3列出了Random類的部分方法。
nextInt方法:無參數(shù)產(chǎn)生的隨機數(shù)分布在整個int類型的取值范圍。82有參數(shù)n
產(chǎn)生一個分布在0-n-1區(qū)間的隨機數(shù)。n是得到返回值的個數(shù)??梢酝ㄟ^在隨機數(shù)上加減一個適當(dāng)?shù)闹祦韺崿F(xiàn)。nextFloat方法返0.0-1.0區(qū)間的浮點隨機數(shù)??梢圆捎贸朔▽Ω↑c隨機數(shù)進行比例放大,截斷小數(shù)后轉(zhuǎn)換成int型隨機數(shù)。然后采用與整型隨機數(shù)相同的處理方法將隨機數(shù)取值區(qū)間移動到所需要的區(qū)間。例題3.2833.5Math類Math類定義在Java標(biāo)準(zhǔn)類庫的java.lang包中,提供了大量用于計算的基本數(shù)學(xué)函數(shù)。Math類的所有方法都是靜態(tài)方法(Static方法,類方法),靜態(tài)方法可以用類名直接調(diào)用,不需要事先實例化類的對象。
value=Math.cos(90)+Math.sqrt(delta);Math類的方法的返回值可以根據(jù)需要用于表達式。
P83圖3.4列出了部分方法。
例題3.3843.6格式化輸出NumberFormat類該類提供了通用的數(shù)據(jù)格式化能力,NumberFormat對象不是用new運算符實例化,而是通過類名調(diào)用靜態(tài)方法來請求執(zhí)行。該類的getCurrencyInstance
方法和getPercentInstance方法分別用于返回格式器對象用于格式化貨幣值和格式化百分率值。
NumberFormat類和DecimalFormat類用于格式化信息,使得顯示出來的信息格式編排清晰、合理。這兩個類是定義在Java標(biāo)準(zhǔn)類庫的類,定義在java.text包中。85通過格式器對象調(diào)用格式化方法,將返回一個String型的字符串,該字符串表示格式化后的數(shù)。例題3.4DecimalFormat類該類需要用new運算符創(chuàng)建對象。該類的構(gòu)造方法接收一個String型參數(shù),該參數(shù)確定了控制格式化處理的模式。調(diào)用format方法可以格式化一個具體的值。還可以根據(jù)需要調(diào)用applyPattern方法,改變格式化對象的模式。
例題3.5(P87)86除了print方法和println方法。System類提供了printf方法該方法允許用戶打印出含有數(shù)值的格式字符串。它的第一個參數(shù)值指定格式字符串,其余的參數(shù)指定將插入到格式字符串中的數(shù)值。
System.out.printf(“ID:%5d\tName:%s”,id,name)在java中添加printf方法以支持遺產(chǎn)系統(tǒng)的移植。3.6.3prinft方法87Java提供一種枚舉型數(shù)據(jù)類型,用于聲明枚舉型變量。枚舉型聲明通過列舉出變量所有可能的取值,為枚舉變量建立所有的枚舉值。枚舉值可以定義為所希望的任何標(biāo)識符。
enumSeason{winter,spring,summer,fall};
枚舉變量的枚舉值沒有個數(shù)的限制。定義了枚舉類型,就可以用該類型聲明枚舉變量。
Seasontime;
枚舉值通過枚舉類型名訪問。
例:time=Season.spring;3.7枚舉型88枚舉型的每個枚舉值在Java內(nèi)部保存為代表枚舉值序數(shù)的整型數(shù)。第一個枚舉值的序數(shù)值為0,第二個為2,依此類推。盡管枚舉值對應(yīng)著一個有效的序數(shù)值,單不能在程序中將一個數(shù)值賦給一個枚舉型變量。枚舉型是一個特殊的類,枚舉型變量是對象變量。主要方法有:
ordinal方法返回與一個枚舉型值相關(guān)聯(lián)的序數(shù)值。
name方法返回枚舉值名。例題3.6枚舉類型是一種安全類型,任何一種試圖使用枚舉值之外某個值的操作都將導(dǎo)致編譯錯誤。893.8.1包裝類的創(chuàng)建和使用
Java使用基本數(shù)據(jù)類型表示數(shù)據(jù)。當(dāng)同時管理兩類數(shù)據(jù)(基本類型和對象引用)是一種挑戰(zhàn)。當(dāng)一個用于包含其他各種類型對象的容器要求包含一個簡單的整型值時,需要將基本數(shù)據(jù)值“包裝”成對象。包裝類是代表一種具體的基本數(shù)據(jù)類型,包裝類的構(gòu)造方法接受并保存一個基本類型的值。3.8包裝類903.8包裝類包裝類屬于java.lang標(biāo)準(zhǔn)包。PrimitiveTypeWrapperClassbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBooleanvoidVoidVoid類不能夠被實例化,它代表一個空引用。913.8包裝類一個包裝類允許將基本類型數(shù)據(jù)作為對象管理。IntegerageObj=newInteger(40);包裝類提供了各種與管理基本類型對應(yīng)的方法。圖3.8Integer類的部分方法圖3.8中,注意:靜態(tài)方法可以通過類名直接調(diào)用。例:num=Integer.parseInt(“978”);將串“978”轉(zhuǎn)換成了整型數(shù)978,并賦值給變量num92包裝類定義了很多有用的靜態(tài)常量。Integer類有靜態(tài)常量MIN_VALUE,MAX_VALUE,分別代表int型數(shù)據(jù)的最小值和最大值。
93自動包裝是基本數(shù)據(jù)類型與相應(yīng)的包裝對象之間的自動轉(zhuǎn)換。
Integerobj; intnum=42; obj=num;與上述類型轉(zhuǎn)換相反的轉(zhuǎn)換成為拆除包裝,當(dāng)需要時也能自定進行轉(zhuǎn)換?;绢愋团c對象類型之間的賦值通常是不兼容的,自動包裝只能在基本類型與包裝類之間進行。
3.8.2自動包裝94Java程序不但是具有命令行應(yīng)用程序,也可以具有圖形組件。在本書的各章末尾將探討建立圖形用戶界面(GUI)組件可以看成是構(gòu)成具有GUI的java應(yīng)用程序的控件。GUI組件包括標(biāo)簽(label),按鈕(button)、單行文本(textfield)、滾動條(scrollbar)和菜單(menu)等Java組件以及有關(guān)GUI類主要定義在java.awt和javax.swing抽象窗口工具包(AWT)是JavaGUI的原始版容器:是一個保存和組織其他組件的特殊組件??蚣埽╢rame)和面板(panel)都是容器。3.9組件和容器95框架是一個容器,用于顯示基于GUI的Java應(yīng)用程序界面。一個框架顯示為具有標(biāo)題欄的獨立窗口,可以根據(jù)需要在屏幕上重定位和改變窗口的大小??蚣苡肑Frame類定義。面板不能獨立顯示。必須加載到一個可以顯示它的容器中,隨著包含該面板的容器移動。其作用是在一個GUI中協(xié)助組織其他組件。面板用JPanel類定義。3.9.1框架和面板96容器可以分為兩類:重量級容器重量級容器由操作系統(tǒng)管理。如frame輕量級容器由Java程序管理。如panel通常通過創(chuàng)建一個顯示GUI的框架來建立一個Java圖形應(yīng)用程序。容器只有在輔助組織和顯示其他組件時候才有用。標(biāo)簽組件用于顯示用戶界面的一行文本,也可以顯示一副圖像。例題3.7
97布局管理器對象對容器進行管理,協(xié)調(diào)容器內(nèi)部的組件部署位置。一般情況下,面板中的組件都是按行順序進行排列除非一行的寬度容納不下或者程序員特別指定。3.9.2布局管理器983.10嵌套的面板可以對面板進行嵌套,建立一個復(fù)雜的組件容器層次結(jié)構(gòu)。見例3.8(95)99Java支持使用JPEG和GIF格式的圖像。一個標(biāo)簽可以含有文本或圖像,或者同時包含文本和圖像。由Graphics類提供drawImage方法繪制圖形。圖像可以加入到一個標(biāo)簽組件,標(biāo)簽組件可以包含文字和圖像。
ImageIcon類代表一個包含在標(biāo)簽中的圖像,該類的構(gòu)造方法接受一個圖像文件名參數(shù),并將參數(shù)指定的圖像文件裝入到ImageIcon對象中。ImageIcon對象可以顯示JPEG或GIF圖像。3.11圖像100可以使用標(biāo)簽的各種方法設(shè)置圖像的位置以及對齊方式例題3.9
4.1類和對象的核心概念4.2類的分析4.3封裝4.4方法剖析4.5構(gòu)造方法的關(guān)鍵概念4.6圖形對象4.7圖形用戶界面4.8按鈕4.9單行文本框主要內(nèi)容:1024.1類和對象的核心概念面向?qū)ο蟪绦蜷_發(fā)的實質(zhì)是設(shè)計和實現(xiàn)自己的類,以滿足用戶的特殊需求的過程。類是現(xiàn)實世界某些對象的共同特征(屬性和操作)的表示,對象是類的實例。類與對象的關(guān)系:類是對象的藍圖;對象是這個類代表概念的一次實現(xiàn),也稱類的對象化或?qū)嵗瘜ο笫怯袪顟B(tài)的,對象的狀態(tài)是由對象的屬性值確定。Java中,一個對象的屬性由類中所聲明的變量定義。103對象具有行為,行為由對象可執(zhí)行的操作確定。一個對象的操作可能改變該對象的狀態(tài)。在Java中,對象的操作由類中聲明的方法定義。104例題4.1每個類有數(shù)據(jù)和方法聲明,數(shù)據(jù)聲明定義了將保存到每個對象中的數(shù)據(jù),方法聲明定義了對象將提供的服務(wù)。類的數(shù)據(jù)和方法稱為類的成員。
4.2類的分析105類的成員數(shù)據(jù)和方法聲明--類的成員--圖4.2intsize,weight;charcategory;DatadeclarationsMethoddeclarations數(shù)據(jù)聲明定義了保存在每個對象中的數(shù)據(jù)。方法聲明定義了對象將提供的服務(wù)。106例題4.2
構(gòu)造函數(shù):是一類特殊的方法,函數(shù)名和類對象相同。在使用new運算符創(chuàng)建一個新的類對象時候,調(diào)用構(gòu)造方法。類中的其他方法定義了類對象提供的各種服務(wù)。注意:
類中的每個方法都應(yīng)該用一段代碼說明方法的功能,這樣使得代碼段分塊清晰,便于查找各個方法。
面向?qū)ο蟪绦蛟O(shè)計是基于類的定義,類代表了有合理的狀態(tài)和行為定義的對象。107Java中常將一個類保存為一個文件。當(dāng)一個文件保存了多個類,則只有一個類可以用保留字Public來聲明,而且public類的名必須與文件名相一致。4.2.1實例數(shù)據(jù)創(chuàng)建類實例時將為類中聲明的變量分配內(nèi)存空間,稱類中聲明的變量為實例數(shù)據(jù)。每個對象都有分配內(nèi)存空間,因此每個對象可以保存不同的實例數(shù)據(jù)值。1084.2.2UML圖UML(UnifiedModelingLanguage)代表統(tǒng)一建模語言.描述類和對象之間的關(guān)系。一個類用一個矩形來表示,由類名、屬性(數(shù)據(jù))和操作(方法)。類之間的關(guān)系由箭頭來表示。虛線表示一個類使用另一個類的方法。109UMLClassDiagrams描述RollingDice程序所包含類的UML類圖RollingDicemain(args:String[]):voidDiefaceValue:introll():intsetFaceValue(intvalue):voidgetFaceValue():inttoString():StringUML圖中,變量的類型寫在變量名后,并用冒號隔開。方法的返回值類型也采用相同的方法表示。110一個對象應(yīng)該封裝起來,以防止類之外的代碼對該對象的數(shù)據(jù)進行不適當(dāng)?shù)脑L問,這種特性稱為--封裝。Encapsulation(封裝)MethodsDataClient封裝:把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù)。111在Java中,使用修飾符實現(xiàn)對象封裝。修飾符是Java保留字,用于規(guī)定程序設(shè)計語言構(gòu)造的具體特征。私有數(shù)據(jù)
方法封裝實際上是將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。
方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)112Java中有些修飾符能夠控制對類成員的訪問,被稱為可見性修飾符。Java有三種可見性修飾符:Public,private,protectedpulic允許外部的代碼訪問或修改類中的數(shù)據(jù)值,破壞了類的封裝性。private
只能由類的內(nèi)部訪問,不能被外部訪問。Protected
與繼承相關(guān)。將在第八章討論。4.3.1可見性修飾符113實例變量如果聲明為private可見性,可以提高類的封裝性。一個方法的可見性取決于該方法的用途,為客戶提供服務(wù)的方法必須聲明為public,這種方法稱為服務(wù)方法。Private方法用途是協(xié)助類的其他方法工作,通常被稱為支持方法。
封裝性對于常量基本無意義。
114VisibilityModifierspublicprivateVariablesMethodsProvideservicestoclientsSupportothermethodsintheclassEnforceencapsulationViolateencapsulationUML類圖中,在成員名字前加符號“+”,表示public可見性,加符號“-”表示private可見性。1154.3.2訪問器和修改器實例數(shù)據(jù)通常聲明為private可見性,一個類通常提供一些服務(wù)用于訪問和修改實例數(shù)據(jù)值。訪問器方法返回當(dāng)前變量的值。修改器方法修改變量的值。訪問器命名的形式為:getXX是要訪問的數(shù)據(jù)成員的名。修改器命名的形式為:setXX是要修改的數(shù)據(jù)成員的名。這類方法有時被稱為獲取器和設(shè)置器。1164.4方法剖析一個方法是給定的一個名稱的一組編程語言語句,方法聲明指定了調(diào)用本方法時要執(zhí)行的代碼。當(dāng)一個方法被調(diào)用時,執(zhí)行控制流就會轉(zhuǎn)移到該方法,并逐條執(zhí)行該方法中語句。當(dāng)方法執(zhí)行完后,控制返回到調(diào)用該方法的位置,繼續(xù)執(zhí)行后續(xù)的程序。117myMethod();myMethodcompute
MethodControlFlow如果被調(diào)用的方法和調(diào)用方法屬于同一個類,可以直接用方法名進行調(diào)用。118doIt
helpMehelpMe();
obj.doIt();main
MethodControlFlow被調(diào)用方法和調(diào)用方法不屬于同一個類,則需要通過另一個類的對象名調(diào)用。119方法頭Amethoddeclarationbeginswithamethodheadercharcalc(intnum1,intnum2,Stringmessage)methodnamereturntypeparameterlistTheparameterlistspecifiesthetypeandnameofeachparameterThenameofaparameterinthemethoddeclarationiscalledaformalparameter120方法體Themethodheaderisfollowedbythemethodbodycharcalc(intnum1,intnum2,Stringmessage){intsum=num1+num2;charresult=message.charAt(sum);returnresult;}Thereturnexpressionmustbeconsistentwiththereturntypesum
andresultarelocaldataTheyarecreatedeachtimethemethodiscalled,andaredestroyedwhenitfinishesexecuting1214.4.1返回語句在方法聲明頭中指定返回值類型,該類型可以是基本數(shù)據(jù)類型、類名、或保留字void(返回空值)。有返回值的方法必須由一條返回語句。當(dāng)執(zhí)行return語句時,控制立即返回到調(diào)用方法中的調(diào)用語句,并繼續(xù)往下執(zhí)行。返回語句由保留字return和后續(xù)的表達式組成,表達式確定了返回的值。returnexpression;一個方法的返回值的類型必須與方法聲明頭規(guī)定的返回值類型一致。1224.4.2參數(shù)參數(shù)是調(diào)用一個方法時候傳遞給該方法的值。方法聲明頭中的參數(shù)列表指定了將傳遞給方法的參數(shù)值和參數(shù)名,被調(diào)用的方法根據(jù)參數(shù)名引用參數(shù)。行參:方法聲明頭中的參數(shù)名稱實參:在一次方法調(diào)用中,實際傳遞給方法的參數(shù)方法調(diào)用和定義的形式是在方法名后的圓括號中給出參數(shù)列表。123如果沒有參數(shù),仍需保留括號。形參是標(biāo)識符,用作方法中的變量。一個方法的形參初始值由調(diào)用該方法的實參賦予。實參可以實常量值、變量或者表達式。調(diào)用方法的參數(shù)的列表必須與方法聲明時的參數(shù)列表相匹配。124Parameters調(diào)用一個方法時,將把實參復(fù)制給被調(diào)用方法的形參。charcalc(intnum1,intnum2,Stringmessage){intsum=num1+num2;charresult=message.charAt(sum);returnresult;}ch=obj.calc(25,count,"Hello");1254.4.3局部數(shù)據(jù)在方法內(nèi)聲明的變量是局部數(shù)據(jù)。一個方法聲明頭中的形式參數(shù)名作為該方法的局部變量名,僅當(dāng)進行方法調(diào)用時形參才存在,方法調(diào)用結(jié)束時形參消亡。在類中聲明的實例數(shù)據(jù)在全類中可以訪問,在方法中聲明的數(shù)據(jù)只能局限在該方法中。由于局部變量和實例變量有不同級別的引用范圍,在方法中聲明的局部變量名可以與類級聲明的實例變量同名。1264.4.4銀行賬戶實例下面討論一個例子以及該類的使用方法。Account類代表一個幾本的銀行賬戶。該類實例包括帳號、當(dāng)前余額、賬戶戶主的姓名。類的服務(wù)包括存款、取款以及計算利息。1274.5構(gòu)造方法的關(guān)鍵概念構(gòu)造方法用于初始化與每個對象有關(guān)的變量。構(gòu)造方法的兩個特點:
1:構(gòu)造方法名與類名相同。
2:構(gòu)造方法不能返回值。不能在構(gòu)造方法的聲明中指定void返回類型。不必為每個類定義構(gòu)造方法,每個類都有一個不帶參數(shù)的默認構(gòu)造方法。1284.6圖形對象一些對象是有圖形界面的,他們的狀態(tài)與行為包含其視覺外觀的信息描述。許多GUI組件是圖形對象。如框架、面板、標(biāo)簽以及圖形。129SmilingFaceExampleTheSmilingFaceprogramdrawsafacebydefiningthepaintComponentmethodofapanelSeeSmilingFace.java(page117)SeeSmilingFacePanel.java(page118)在SmilingFace類中main方法只是生成程序框架,然后在該框架中生成并顯示
SmilingFacePanel類的一個實例。TheSmilingFacePanel類繼承了JPanel類。130SmilingFaceExample每一個Swing組件都有一個paintComponent方法。
paintComponent接收一個
Graphics類型的對象作為參數(shù),該類對象代表一個組件的圖形上下文。paintComponent除了設(shè)置面板的背景色之外,還通過各種方法繪制笑臉和文字。注意在面板上繪圖和往面板上添加組件到面板的區(qū)別。131SplatExample該程序在面板上繪制了一系列的填充圓,每一個圓都是一個單獨的對象。paintComponent方法讓每個circle對象繪制本身。SeeSplat.java(page121)SeeSplatPanel.java(page121)SeeCircle.java(page122)1324.7圖形用戶界面在java中建立圖形用戶界面至少需要三種類型的對象組件事件監(jiān)聽器GUI組件是用于顯示信息的屏幕元素。labels,buttons,textfields,menus,etc.容器是一種特殊的組件,用于容納和管理其他組件。
frames,panels,applets,dialogboxes133事件事件時一個對象,代表我們關(guān)心的某個事件的發(fā)生。Forexample,wemaywantourprogramtoperformsomeactionwhenthefollowingoccurs:themouseismovedthemouseisdraggedamousebuttonisclickedagraphicalbuttonisclickedakeyboardkeyispressedatimerexpires大部分組件會根據(jù)用戶的動作產(chǎn)生與該組件相關(guān)的事件。134一個程序基于圖形用戶界面來處理用戶事件稱為事件驅(qū)動。監(jiān)聽器是一個對象,他等待某個事件的發(fā)生并作出某種反應(yīng)。要認真建立監(jiān)聽器、監(jiān)聽器所監(jiān)聽的事件以及產(chǎn)生該事件的組件之間的聯(lián)系。135EventsandListenersComponentAcomponentobjectmaygenerateaneventListenerAcorrespondinglistenerobjectisdesignedtorespondtotheeventEventWhentheeventoccurs,thecomponentcallstheappropriatemethodofthelistener,passinganobjectthatdescribestheevent136大多數(shù)情況下將使用java類庫定義的組件和事件。使用GUI創(chuàng)建Java程序工作流程:實例化并設(shè)置需要的組件。實現(xiàn)監(jiān)聽器類,定義某種事件發(fā)生時候程序該采取的動作。建立監(jiān)聽器類與產(chǎn)生用戶關(guān)心事件的組件之間的聯(lián)系。137按鈕是一種允許用戶通過鼠標(biāo)點擊發(fā)出動作的組件。按鈕用JButton類定義。當(dāng)JButton被按下時候會產(chǎn)生一個動作事件
PushCounter執(zhí)行后顯示一個按鈕,用戶每點擊按鈕一次,計數(shù)器就會被更形并顯示點擊次數(shù)。SeePushCounter.java(page125)SeePushCounterPanel.java(page125)4.8按鈕138PushCounterExample程序中使用的組件包括一個按鈕,一個用于顯示次數(shù)的標(biāo)簽,一個組織界面的面板以及一個用于顯示該面板的框架。
PushCounterPanel
類用實現(xiàn)面板的功能,用來顯示按鈕和標(biāo)簽。PushCounterPanel
類繼承了JPanel類
PushCounterPanel類的構(gòu)造方法建立了圖形用戶界面。并且初始化計數(shù)器為0.139PushCounterExampleButtonListener
類用于監(jiān)聽按鈕按下的事件。將ButtonListener類定義為內(nèi)部類:在一個類的內(nèi)部定義一個類。可以對其所在的類的所有成員變量擁有了訪問權(quán)限。監(jiān)聽器與GUI組件交互非常方便。內(nèi)部類只在兩個關(guān)系緊密且不需要被外部的其他類訪問時候參使用時。140PushCounterExample編寫監(jiān)聽器類需要實現(xiàn)一個接口ButtonListener類實現(xiàn)
ActionListenerinterface接口中定義了一系列需要在實現(xiàn)他的類中定義的方法。ActionListener接口中只聲明了
actionPerformedmethodJava標(biāo)準(zhǔn)類庫中為很多事件都定義了接口。141PushCounterExamplePushCounterPanelconstructor:instantiatestheButtonListenerobjectestablishestherelationshipbetweenthebuttonandthelistenerbythecalltoaddActionListenerWhentheuserpressesthebutton,thebuttoncomponentcreatesanActionEventobjectandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodincrementsthecounterandresetsthetextofthelabel1424.9單行文本單行文本允許用戶一次輸入一行文本。當(dāng)光標(biāo)在單行文本框里,用戶按下enterkey,會產(chǎn)生一個動作事件。SeeFahrenheit.java(page127)SeeFahrenheitPanel.java(page128)143FahrenheitExampleLikethePushCounterexample,theGUIissetupinaseparatepanelclassTheTempListenerinnerclassdefinesthelistenerfortheactioneventgeneratedbythetextfieldTheFahrenheitPanelconstructorinstantiatesthelistenerandaddsittothetextfieldWhentheusertypesatemperatureandpressesenter,thetextfieldgeneratestheactioneventandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodcomputestheconversionandupdatestheresultlabel
5.1布爾表達式5.2if語句5.3數(shù)據(jù)比較5.4switch語句
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 益陽醫(yī)學(xué)高等??茖W(xué)?!度瞬潘刭|(zhì)測評與選拔》2023-2024學(xué)年第二學(xué)期期末試卷
- 做賬實操-機械制造公司的賬務(wù)處理分錄
- 鄭州經(jīng)貿(mào)學(xué)院《網(wǎng)路原理與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西服裝工程學(xué)院《專業(yè)課程綜合2(酒店)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴陽人文科技學(xué)院《環(huán)境與食品安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025山西省建筑安全員-C證考試題庫
- 廣西財經(jīng)學(xué)院《老年社會工作》2023-2024學(xué)年第二學(xué)期期末試卷
- 大連理工大學(xué)城市學(xué)院《地理空間數(shù)據(jù)庫》2023-2024學(xué)年第二學(xué)期期末試卷
- 常德職業(yè)技術(shù)學(xué)院《藥劑學(xué)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西金融職業(yè)學(xué)院《公共危機治理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院單招職業(yè)技能測試題庫標(biāo)準(zhǔn)卷
- 2025年重慶三峰環(huán)境集團招聘筆試參考題庫含答案解析
- 育嬰培訓(xùn)課件
- 《管理品牌資產(chǎn)》戴維·阿克著
- 藥品網(wǎng)絡(luò)交易服務(wù)三方平臺質(zhì)量管理體系文件-B2B平臺(完整版)
- 粵教粵科版三年級下冊科學(xué)全冊課時練(同步練習(xí))
- 電網(wǎng)數(shù)字化項目工作量度量規(guī)范應(yīng)用指南(2020版)
- 小學(xué)開學(xué)第一課禁毒安全
- 2025年砌筑工職業(yè)技能(中級)知識考試題庫及答案
- 開題報告:適應(yīng)人口發(fā)展趨勢的區(qū)域教育結(jié)構(gòu)優(yōu)化與政策調(diào)整研究
- 【MOOC】跨文化交際-蘇州大學(xué) 中國大學(xué)慕課MOOC答案
評論
0/150
提交評論