面向?qū)ο蟮某绦蛟O(shè)計(jì)課件_第1頁(yè)
面向?qū)ο蟮某绦蛟O(shè)計(jì)課件_第2頁(yè)
面向?qū)ο蟮某绦蛟O(shè)計(jì)課件_第3頁(yè)
面向?qū)ο蟮某绦蛟O(shè)計(jì)課件_第4頁(yè)
面向?qū)ο蟮某绦蛟O(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩378頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第一章HelloJavaJava語(yǔ)言及其家族的發(fā)展史;主要的運(yùn)行平臺(tái);程式運(yùn)行環(huán)境的安裝;一個(gè)簡(jiǎn)單的java程式及其運(yùn)行;Java語(yǔ)言基礎(chǔ)知識(shí);面向?qū)ο蟪淌皆O(shè)計(jì)思想。2Historyofjava--24頁(yè)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);取消自動(dòng)類型轉(zhuǎn)換,要求強(qiáng)制轉(zhuǎn)換。結(jié)論:Java=“C++”-”複雜性和奇異性”+“安全性和可移植性”4Historyofjava1991:Oaklanguage;1994:OaknamedJava;1995:Java正式發(fā)佈,Microsoft,IBM,Netscape,NovellApple,DEC紛紛購(gòu)買使用權(quán).1996:Sun成立Javasoft分公司5主要的運(yùn)行平臺(tái)J2EE(Java2EnterpriseEdition)—企業(yè)計(jì)算J2SE(Java2StandardEdition)—桌面計(jì)算J2ME(Java2MicroEdition)—嵌入計(jì)算6程式運(yùn)行環(huán)境的安裝—J2SE運(yùn)行檔“jdk-1_5_0_06-windows-i586-p.exe”,直到安裝成功。運(yùn)行檔“UltraEdit_11.101_SC(1).exe”安裝java根源程式編寫工具。打開UltraEdit_11.101_SC(1).exe,我們編寫一個(gè)簡(jiǎn)單的java小程式。7FirstPrograminJava:PrintingaLineofText//Text-printingprogram.publicclasswelcome{

//mainmethodbeginsexecutionofJavaapplicationpublicstaticvoidmain(Stringargs[]){System.out.println("WelcometoJavarogramming!");}//endmethodmain}//endclassWelcome8程式運(yùn)行環(huán)境的安裝安裝完JDK後,

命令行輸入cmd程式運(yùn)行過程是:

先編譯javacWelcome.java->

成功后會(huì)生成Welcome.class可執(zhí)行檔,我們?cè)佥斎雑avaWelcome即可執(zhí)行這個(gè)檔?!踩鐖D〕9程式運(yùn)行環(huán)境的安裝如果發(fā)生錯(cuò)誤,請(qǐng)檢查環(huán)境變數(shù)有沒有設(shè)置好。先觀察一下安裝jdk的目錄結(jié)構(gòu):C:\javabinlibclasses.zipjavacjavaappletviewer用戶類檔所在目錄myclasses當(dāng)前目錄10程式運(yùn)行環(huán)境的安裝環(huán)境變數(shù)具體設(shè)置

方法是:EditPathVariable=\jdkinstallfold\bin;11程式運(yùn)行環(huán)境的安裝AddCLASSPATHVariable

=.;\jdkinstallfold\lib;

\myjavaprogramclass12Java語(yǔ)言的運(yùn)行時(shí)環(huán)境:java虛擬機(jī)25頁(yè)JavasourcecodeMachinecodeJavabytecodeBytecodeinterpreterBytecodecompilerJavacompiler13JDK1.2(~V1.3.0,V1.3.1,V1.4.2,V1.5.0)Jcreator:圖形化的Java程式的編輯環(huán)境

Forte:Sun功能強(qiáng)大的集成開發(fā)環(huán)境

Jbuilder:圖形化,客戶端與伺服器端

WebLogic:適於開發(fā)伺服器端

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:程式的開始幾行是注釋,由符號(hào)//開始到一行結(jié)束

2:所有的Java程式都有一個(gè)main方法,程式的執(zhí)行從main方法開始,main中包含的語(yǔ)句按照順序一條一條地執(zhí)行,直到這個(gè)方法結(jié)束。164.1注釋

注釋是獨(dú)立於代碼的,應(yīng)當(dāng)表現(xiàn)程式員編寫程式的初衷或者意圖。注釋的內(nèi)容可以是任何文本,注釋將被電腦忽略,不影響程式的執(zhí)行。Java有三種注釋的方式:1。//

注釋內(nèi)容由//一直到此行結(jié)束2。/*和*/定義一個(gè)注釋塊3。/**開始,*/結(jié)束這種注釋方法可用來(lái)自動(dòng)產(chǎn)生文檔17識(shí)別字和保留字--20頁(yè)識(shí)別字(Identifier):以字母(letter),下劃線(underline)(_),美元符($)開始的一個(gè)字元序列,後面可以跟字母,下劃線,美元符,數(shù)字(number)。Java對(duì)大小寫敏感,識(shí)別字命名應(yīng)該具有描述性和可讀性。例如:Identifier,userName,User_Name,_sys_val,$change,2mail,room#,classrightrightwrong18識(shí)別字和保留字--20頁(yè)保留字(reservedword):特殊的有意義的識(shí)別字。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頁(yè)空白符用於分隔程式中的單詞和符號(hào)。合理使用空白符可以使程式更加可讀和易懂。見例1.2,1.320面向?qū)ο缶幊蘡lassCar{intcolor_number;intdoor_number;intspeed;

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

電腦中的對(duì)象的原型

現(xiàn)實(shí)生活中的對(duì)象21類(class)和對(duì)象(object)類是描述對(duì)象的“基本原型”,類沒有存儲(chǔ)空間。對(duì)象是類的一個(gè)實(shí)例,每個(gè)對(duì)象都有自己的存儲(chǔ)空間,它由一組結(jié)構(gòu)化的數(shù)據(jù)(variables)和在其上的一組操作(methods)構(gòu)成。variablesmethods22封裝(encapsulation)什麼是封裝?封裝把對(duì)象的所有組成部分組合在一起,封裝定義程式如何引用對(duì)象的數(shù)據(jù)。私有數(shù)據(jù)

方法封裝實(shí)際上是將類的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類的修改和訪問數(shù)據(jù)的程度。

方法數(shù)據(jù)對(duì)象A對(duì)象B公有數(shù)據(jù)23繼承(inheritance)子類是作為另一個(gè)類的擴(kuò)充或修正所定義的一個(gè)類.bicycle(superclass)父類MountainbikesRacingbikesTandembikessubclass(子類)24繼承(inheritance)繼承是子類利用父類中定義的方法和變數(shù)就像它們屬於子類本身一樣.一個(gè)類可以通過繼承由其他類產(chǎn)生,而一個(gè)類本身還可以派生出更多的類,這樣就建立起類層次結(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)係的不同類型的對(duì)象。Java是一種面向?qū)ο缶幊陶Z(yǔ)言,對(duì)象是java程式中最基本的實(shí)體。本課程的重點(diǎn)就是學(xué)習(xí)java的面向?qū)ο蟪淌皆O(shè)計(jì)思想。學(xué)習(xí)方法:認(rèn)真聽課,多上機(jī)實(shí)踐,及時(shí)鞏固。26課後自練:安裝java編程環(huán)境jdk1.5,並正確配置環(huán)境變數(shù)。鍵入教材17頁(yè)例1.1程式並在java虛擬機(jī)上編譯執(zhí)行。試在你的機(jī)器上練習(xí)36頁(yè)的pp1.1,pp1.2,pp1.7,pp1.8.主要內(nèi)容1:字串2:變數(shù)與賦值3:基本數(shù)據(jù)類型4:運(yùn)算式5:數(shù)據(jù)類型轉(zhuǎn)換6:交互程式7:圖形8:JavaApplet9:繪圖282.1字串字元字元是指用單引號(hào)括起來(lái)單個(gè)字元,這裏的字元不是指占1個(gè)位元組的ASCII字元,而是指占2個(gè)位元組的Unicode字元。因?yàn)閁nicode被設(shè)計(jì)用來(lái)處理現(xiàn)在世界上所有書面語(yǔ)言中的字元,所以一個(gè)漢字也是被當(dāng)作一個(gè)字元來(lái)處理的。29

字串指的是字元的序列,有兩種類型的字串:一種是創(chuàng)建以後不需要改變的,稱為字串常量,在Java中,String類用於存儲(chǔ)和處理字串常量;另外一種字串是創(chuàng)建以後,需要對(duì)其進(jìn)行改變的,稱為字串變數(shù)。一個(gè)字串是一個(gè)對(duì)象,由String類定義。在Java中常以雙引號(hào)作為字串的定界符。字串30

System.out.println(“whareveryouare,beagoodman.”);注意:

System.out對(duì)象代表一個(gè)輸出設(shè)備或者檔,默認(rèn)的輸出設(shè)備是顯示器螢?zāi)弧?.1.1println和print方法println方法為我們執(zhí)行了一個(gè)服務(wù),向輸出設(shè)備發(fā)送一個(gè)println消息,請(qǐng)求輸出某個(gè)文本消息。Println與print的相同與區(qū)別相同點(diǎn):都是向輸出對(duì)象發(fā)送一個(gè)消息,請(qǐng)求輸出某中消息不同點(diǎn):println在輸出消息後換行,print保持游標(biāo)在當(dāng)前位置31當(dāng)輸出長(zhǎng)度大於一行的字串時(shí),使用字串拼接。方法:使用字串拼接運(yùn)算符號(hào)“+”將兩個(gè)字串拼接起來(lái)例如:“Theonlystupidquestionis”+”theonethat’snotasked.”2.1.2字串拼接輸出結(jié)果:Theonlystupidquestionistheonethat’snotasked.注意:如何區(qū)分符號(hào)“+”的作用如果“+”運(yùn)算符的兩個(gè)運(yùn)算元中至少有一個(gè)是字串,則執(zhí)行字串拼接322.1.3轉(zhuǎn)義序列

在Java中使用轉(zhuǎn)義序列來(lái)表示特殊的字元。

通常一個(gè)轉(zhuǎn)義序列以反斜杠(\)開頭,表明該字符或者後續(xù)字元應(yīng)當(dāng)用特殊的方式來(lái)解釋。如輸出:’’則\”33342.2變數(shù)與賦值2.2.1變數(shù)變數(shù)代表保存數(shù)據(jù)的記憶體單元,變數(shù)名是記憶體單元的符號(hào)地址。一行變數(shù)聲明由類型說(shuō)明符及後續(xù)的變數(shù)名列表組成。每一個(gè)變數(shù)可以在聲明時(shí)用指定的運(yùn)算式進(jìn)行初始化。如果聲明中使用了final修飾符,則所聲明的識(shí)別字命名為常量,並且一旦賦值就不可以更改。一行變數(shù)聲明語(yǔ)句可以同時(shí)聲明多個(gè)具有相同類型的變數(shù)。聲明同時(shí)可以根據(jù)需要對(duì)變數(shù)進(jìn)行初始化。35Java中使用賦值運(yùn)算符“=”為變數(shù)賦值基本格式是:

識(shí)別字=運(yùn)算式過程:基本賦值語(yǔ)句用賦值運(yùn)算符號(hào)將運(yùn)算式的計(jì)算結(jié)果保存到指定的識(shí)別字所代表的記憶體單元中,該識(shí)別字代表的記憶體單元通常是一個(gè)變數(shù)。

2.2.2賦值語(yǔ)句注意:不允許將一個(gè)值賦給一個(gè)類型不一致的變數(shù)。例如:

sides=10;36常量:

常量的值在整個(gè)程式執(zhí)行過程中是不能修改的。與變數(shù)不同的是常量在存在期間保存一個(gè)特定的值。2.2.3常量在Java中使用保留字fianl來(lái)定義一個(gè)識(shí)別字為常量。通常用大寫字母命名一個(gè)常量以區(qū)別普通變數(shù),並且常量名的各單詞之間用下劃線分隔。例如:finalintMAX_INT=100

常量初始化賦值後,如果試圖修改常量的值,則編譯器會(huì)產(chǎn)生錯(cuò)誤資訊。

372.3基本數(shù)據(jù)類型分四大類:邏輯、字元、整數(shù)和浮點(diǎn)共8種基本數(shù)據(jù)類型邏輯類型:boolean字元類型:char整數(shù)類型:byte,short,int和long浮點(diǎn)類型:float和double

各種數(shù)值類型的差別在於保存不同數(shù)據(jù)類型的數(shù)時(shí)佔(zhàn)用記憶體空間大小不同,由此決定了不同數(shù)據(jù)類型所能表示的數(shù)的取值範(fàn)圍。38在Java編程語(yǔ)言中有四種整數(shù)類型,每種類型可使用關(guān)鍵字byte,short,int和long中的任意一個(gè)進(jìn)行聲明。所有Java編程語(yǔ)言中的整數(shù)類型都是帶符號(hào)的數(shù)字,不存在無(wú)符號(hào)整數(shù)。整數(shù)類缺省為int類型,如在其後有一個(gè)字母“L”表示一個(gè)long值(也可以用小寫“l(fā)”)。由於小寫“l(fā)”與數(shù)字“1”容易混淆,因而,建議大家採(cǎi)用大寫“L”2.3.1整數(shù)類byte,short,int,long四種整數(shù)類型的存儲(chǔ)空間長(zhǎng)度、能表示的範(fàn)圍是不一樣的,具體範(fàn)圍見後表。3940

在Java編程語(yǔ)言中有兩種浮點(diǎn)類型:float和double。

如果一個(gè)數(shù)包括小數(shù)點(diǎn)或指數(shù)部分,或者在數(shù)字後帶有字母F或f(float)、D或d(double),則該數(shù)為浮點(diǎn)數(shù)。如果不明確指明浮點(diǎn)數(shù)的類型,浮點(diǎn)數(shù)缺省為double。下麵是幾個(gè)浮點(diǎn)數(shù):

3.14159

(double型浮點(diǎn)數(shù))

6.56f

(float型浮點(diǎn)數(shù))

2浮點(diǎn)類double,float

在兩種類型的浮點(diǎn)數(shù)中,float為32位(單精確度),double為64位(雙精度)。也就是說(shuō)double類型的浮點(diǎn)數(shù)具有更高的精度。412.3.2字元型字元型是一種電腦使用和管理的基本數(shù)據(jù)類型。單個(gè)字元可以作為一項(xiàng)數(shù)據(jù)。

在Java中,用單引號(hào)表示字元常量。字串常量用雙引號(hào)作為定界符號(hào)。而String不是Java的基本數(shù)據(jù)類型,而是一個(gè)類。注意:一個(gè)數(shù)字作為一個(gè)字元和作為一個(gè)數(shù)值的差別。Java使用16為Unicode字元集來(lái)表示字元。422.3.3布爾型Java使用boolean定義布爾變數(shù)。布爾型變數(shù)包括兩種有效值:true和false

布爾變數(shù)通常用於判斷一個(gè)具體條件是否為真,也可以用於標(biāo)識(shí)任何一種有兩種狀態(tài)的情況。

一個(gè)布爾型值不能夠轉(zhuǎn)換為其他任何一種類型的值,反之亦然。432.4運(yùn)算式運(yùn)算式由一個(gè)以上的運(yùn)算符和運(yùn)算元按一定規(guī)則組合而成,通常用於完成計(jì)算。2.4.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括加號(hào)(+)、減號(hào)(-)、乘號(hào)(*)、除號(hào)(/)、取模(%)、自增運(yùn)算符(++)、自減運(yùn)算符(--)等。在算術(shù)運(yùn)算中,有以下值得注意的地方:(1)算術(shù)運(yùn)算符的原則是先乘除、再加減,括弧優(yōu)先。(2)整數(shù)除法會(huì)直接砍掉小數(shù),而不是進(jìn)位44(3)與C語(yǔ)言不同,對(duì)取模運(yùn)算符%來(lái)說(shuō),其運(yùn)算元可以為浮點(diǎn)數(shù)。如:37.2%10=7.2。(4)Java也用一種簡(jiǎn)寫形式進(jìn)行運(yùn)算,並同時(shí)進(jìn)行賦值操作。例如,為了將10加到變數(shù)x,並將結(jié)果賦給x,可用:x+=10。(5)Java對(duì)加運(yùn)算符進(jìn)行了擴(kuò)展,使它能夠進(jìn)行字串的連接,如"abc"+"def",得到串"abcdef"。

45(6)首碼++、--與尾碼++、--的區(qū)別:

++i(首碼++)在使用i之前,使i的值加1,因此執(zhí)行完++i後,整個(gè)運(yùn)算式和i的值均為i+1;

i++(尾碼++)在使用i之後,使i的值加1,因此執(zhí)行完i++後,整個(gè)運(yùn)算式的值為i,而i的值變?yōu)閕+1。

--i在使用i之前,使i的減1,因此執(zhí)行完--i後,整個(gè)運(yùn)算式和i的值均為i-1;

i--在使用i之後,使i的減1,因此執(zhí)行完i--後,整個(gè)運(yùn)算式的值為i,而i的值變?yōu)閕-1。462.4.2運(yùn)算符優(yōu)先順序算術(shù)運(yùn)算符遵循代數(shù)運(yùn)算相同的運(yùn)算規(guī)則。乘、除法和求餘運(yùn)算符有相同的運(yùn)算優(yōu)先順序,優(yōu)先順序別高於加減法。具有相同優(yōu)先順序別的運(yùn)算符按照從左到右的順序執(zhí)行。在運(yùn)算式中,可以使用括弧來(lái)強(qiáng)制性改變運(yùn)算符的優(yōu)先順序。當(dāng)括弧嵌套使用時(shí),運(yùn)算式的計(jì)算從嵌套最內(nèi)層的括弧開始。賦值運(yùn)算符的運(yùn)算優(yōu)先順序比算術(shù)運(yùn)算符的優(yōu)先順序別低。注意引用不改變變數(shù)的值:如:sum=count+totalsum=sum+1

47482.5數(shù)據(jù)類型轉(zhuǎn)換2.5.1類型轉(zhuǎn)換的安全性基本數(shù)據(jù)類型間的類型轉(zhuǎn)換可分為兩類:

擴(kuò)展類型轉(zhuǎn)換和壓縮類型轉(zhuǎn)換

擴(kuò)展類型轉(zhuǎn)換是安全的類型轉(zhuǎn)換,因?yàn)樵谶M(jìn)行類型轉(zhuǎn)換時(shí)將使用相等的或者更大的存儲(chǔ)空間來(lái)保存類型轉(zhuǎn)換後的值,不會(huì)丟失資訊。

壓縮類型轉(zhuǎn)換是使用更少的存儲(chǔ)空間來(lái)保存類型轉(zhuǎn)換後的值,某些資訊被捨棄。49在Java中,數(shù)據(jù)轉(zhuǎn)換的方式有三種:1:賦值類型轉(zhuǎn)換。當(dāng)將一個(gè)類型的變數(shù)賦給另一種類型的變數(shù)時(shí),該值將會(huì)被轉(zhuǎn)換為新類型的值。只能進(jìn)行擴(kuò)展類型轉(zhuǎn)換。例如:money=dollars2:低級(jí)別類型向高級(jí)別類型的自動(dòng)類型轉(zhuǎn)換當(dāng)某種運(yùn)算符為了進(jìn)行運(yùn)算需要修改其運(yùn)算元類型時(shí),將進(jìn)行自動(dòng)類型轉(zhuǎn)換。2.5.2數(shù)據(jù)類型的轉(zhuǎn)換技術(shù)50

強(qiáng)制類型轉(zhuǎn)換的格式是:(數(shù)據(jù)類型)變數(shù)名

經(jīng)過強(qiáng)制類型轉(zhuǎn)換,將得到一個(gè)在“()”中聲明的數(shù)據(jù)類型的數(shù)據(jù),該數(shù)據(jù)是從指定變數(shù)所包含的數(shù)據(jù)轉(zhuǎn)換而來(lái)的。值得注意的是,指定變數(shù)本身不會(huì)發(fā)生任何變化。將佔(zhàn)用位數(shù)較長(zhǎng)的數(shù)據(jù)轉(zhuǎn)化成佔(zhàn)用位數(shù)較短的數(shù)據(jù)時(shí),可能會(huì)造成數(shù)據(jù)超出較短數(shù)據(jù)類型的取值範(fàn)圍,造成“溢出”。如:

longi=10000000000;intj=(int)i;

因?yàn)檗D(zhuǎn)換的結(jié)果已經(jīng)超出了int型數(shù)據(jù)所能表示的最大整數(shù)(4294967295),造成溢出,產(chǎn)生了錯(cuò)誤。3:強(qiáng)制類型轉(zhuǎn)換512.6交互程式Scanner類是標(biāo)準(zhǔn)的Java類庫(kù)的類,提供了一些從不同數(shù)據(jù)源讀取各種類型數(shù)據(jù)的方法。首先必須創(chuàng)建Scanner類對(duì)象以便應(yīng)用其方法。

Scannerscan=new

Scanner(System.in)Scanner類的next方法將下一個(gè)輸入資料項(xiàng)目作為字串讀入並返回該字串。如果輸入數(shù)據(jù)由一系列用空格分隔的單詞組成,每次調(diào)用next函數(shù)將返回一個(gè)單詞。Nextline方法讀取所有數(shù)據(jù)直到輸入行結(jié)束,並將所讀的數(shù)據(jù)作為一個(gè)字串返回。

例題2.8

例題2.9522.7圖形基本概念像素:構(gòu)成一副圖形的基本元素。通過保存每個(gè)像素的顏色值來(lái)保存一副完整的圖形。數(shù)位化以後的圖形可以通過重組像素點(diǎn)來(lái)重建,表示圖形用的像素越多,圖形越清晰和真實(shí)。表示圖形所用的像素點(diǎn)數(shù)稱為圖形的解析度。顯示器所能顯示的像素點(diǎn)數(shù)稱為顯示器解析度。

53

圖像的每個(gè)像素點(diǎn)都能映射到顯示器螢?zāi)簧系南袼攸c(diǎn)上。與傳統(tǒng)座標(biāo)相比較,java使用一套相對(duì)簡(jiǎn)單的坐標(biāo)系統(tǒng)。座標(biāo)的圓點(diǎn)在繪圖區(qū)的左上角,所有的可見座標(biāo)都是正值。Java語(yǔ)言使用一套相對(duì)簡(jiǎn)單的坐標(biāo)系統(tǒng),所有的值都是正的。2.7.1坐標(biāo)系統(tǒng)YX(0,0)11240(112,40)542.7.2顏色表示方法黑白圖形的一個(gè)像素用1位二進(jìn)位位表示(white=0,black=1)彩色圖片需要更多資訊,因此產(chǎn)生了一些方法來(lái)表示它。三基色表示法。每種顏色可以由三種基本顏色表示出來(lái):

紅色(Red),綠色(Green),藍(lán)色(Blue)Java用三個(gè)數(shù)字表示顏色值,稱為RGB

用一個(gè)位元組(8位)保存一個(gè)基色值,取值範(fàn)圍是0—255

一個(gè)基色值可以表示這種基色的256級(jí)亮度。每種基色的亮度級(jí)的合成決定像素點(diǎn)的最終顏色。55Java使用Color類(包含在java.awt中),定義和管理顏色,Color類的每個(gè)對(duì)象代表一種顏色。Color類的每個(gè)對(duì)象代表一種顏色,該類創(chuàng)建了幾個(gè)實(shí)例用於提供一組預(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)用程式是一個(gè)擁有主方法的單獨(dú)程式。Javaapplet是一種可以通過Web軟體下載執(zhí)行的可執(zhí)行程式。2.8.1Javaapplet的基本概念使用Javaapplet是為了將Javaapplet嵌入HTML文檔,通過網(wǎng)路傳送並使用流覽器執(zhí)行。Javaapplet可以通過JDK提供的appletviewer,來(lái)解釋執(zhí)行。Javaapplet沒有主方法。但是還有一些特殊的方法用於構(gòu)建applet。57paint方法在applet繪圖的時(shí)候?qū)⒆詣?dòng)調(diào)用,繪製圖像內(nèi)容。Pain方法接收的參數(shù)是一個(gè)Graphics對(duì)象。一個(gè)Graphics對(duì)象定義了用於交互的繪圖上下文環(huán)境,該環(huán)境將作為整個(gè)applet窗口環(huán)境。Graphics類有繪圖的方法提供給用戶使用。58Javaapplet在使用之前必須編譯成位元組碼格式,然後將位元組碼鏈接到一個(gè)HTML檔並通過Web進(jìn)行傳送,一旦達(dá)到目的地,嵌入到Web流覽器中的Java解釋器將用於執(zhí)行Javaapplet.

要使一個(gè)Javaapplet能通過Web傳送並由Web流覽器執(zhí)行,必須在超文本標(biāo)記語(yǔ)言文檔中引用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檔中的位元組碼由網(wǎng)路進(jìn)行傳送。在電腦中執(zhí)行。同時(shí)規(guī)定了applet的高度和寬度。2:applet引用的是位元組碼檔,而不是根源程式。602.9繪圖

Java提供許多支持繪圖功能的類,Graphics類其中之一。該類包含在java.awt包中,主要提供了各種方法繪製圖形,包括線段、矩形和橢圓等。Graphics類的方法允許指定是否需要填充圖形。一個(gè)非填充的圖形只顯示圖形的輪廓線,圖形是透明的,可以看到底層的任何圖形。一個(gè)填充的圖形邊界是填實(shí)的。繪圖主要方法見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每一個(gè)繪圖組件上有一個(gè)背景色。每一個(gè)圖形上下文環(huán)境有一個(gè)當(dāng)前的前景色。二者都可以清晰地看到。可以由Graphics類的setColor方法設(shè)置前景色,由setBackground方法設(shè)置背景色。見例題2.11

1:外接矩形用於定義曲線圖形的位置和大小。2:一段弧可以看成橢圓的一段,要畫一段弧,需要指定這段弧所屬的橢圓和要畫的該橢圓上的弧段。3:弧段的起點(diǎn)由起始角定義,結(jié)束點(diǎn)由弧角定義。注意:65建立對(duì)象String類包Random類Math類主要內(nèi)容格式化輸出枚舉型包裝類組件和容器嵌套的面板圖像663.1建立對(duì)象

在Java中,變數(shù)名代表一個(gè)基本數(shù)據(jù)類型值或者是一個(gè)對(duì)象.

類名能被用於定義對(duì)象變數(shù)。

Stringtitle;上述語(yǔ)句並不創(chuàng)建任何對(duì)象。一個(gè)對(duì)象引用變數(shù)不能保存對(duì)象本身,而是保存該對(duì)象的地址。對(duì)象本身必須單獨(dú)創(chuàng)建。67通常我們使用new關(guān)鍵字來(lái)建立一個(gè)對(duì)象。建立一個(gè)對(duì)象稱為對(duì)相應(yīng)“類”的實(shí)例化或?qū)ο蠡tringtitle=newString("JavaSoftwareSolutions");調(diào)用了String的構(gòu)造函數(shù),這一函數(shù)建立一個(gè)String類型的對(duì)象title,並對(duì)其初始化為“JavaSoftwareSolutions”

使用new運(yùn)算符返回新對(duì)象的地址。68分析下麵兩條聲明語(yǔ)句:經(jīng)過聲明的變數(shù)經(jīng)過初始化後:“JamesGosling"namenum142intnum;Stringname;num=42;name=newString(“JamesGosling”);69類對(duì)象初始化以後,可以使用”.”運(yùn)算符來(lái)引用對(duì)象的方法。該運(yùn)算符直接跟在對(duì)象名後,接著給出被調(diào)用的方法。

count=title.length()有些方法完成後產(chǎn)生返回值,有些方法則不產(chǎn)生返回值,方法的返回值可以用於運(yùn)算式或者任務(wù)。一個(gè)方法的調(diào)用可以看成是讓對(duì)象執(zhí)行某種服務(wù)。70在使用一個(gè)對(duì)象引用變數(shù)之前,必須完成初始化,使之指向一個(gè)有效的對(duì)象,不然系統(tǒng)將發(fā)出錯(cuò)誤資訊??梢詫?duì)象引用變數(shù)設(shè)置為null,表示一個(gè)對(duì)象引用變數(shù)不指向任何對(duì)象。使用new運(yùn)算符建立對(duì)象後,將調(diào)用類的構(gòu)造方法初始化新對(duì)象。構(gòu)造方法是一種特殊的方法,方法名與類名相同。幾點(diǎn)說(shuō)明:

對(duì)象引用變數(shù)保存的是對(duì)象的地址,可以看成是指向?qū)ο蟠鎯?chǔ)單元的指針。71在聲明時(shí)初始化對(duì)象,可以將聲明對(duì)象引用變數(shù)和創(chuàng)建對(duì)象合併。如:

Stringtitle=newString(“Java”);對(duì)於String對(duì)象,無(wú)須顯式地使用new運(yùn)算符以及調(diào)用構(gòu)造方法來(lái)創(chuàng)建對(duì)象,如:

StringCity=“BeiJing”;

723.1.2別名機(jī)制對(duì)於簡(jiǎn)單數(shù)據(jù)類型:賦值語(yǔ)句將num1中的值賦值一份賦給num2變數(shù)。num138num296Before:num2=num1;num138num238After:73對(duì)於對(duì)象類型:賦值語(yǔ)句複製的僅僅的對(duì)象的引用地址。name2=name1;name1name2Before:"SteveJobs""SteveWozniak"name1name2After:"SteveJobs"74別名——多個(gè)對(duì)象引用變數(shù)指向同一個(gè)對(duì)象。多個(gè)對(duì)象引用變數(shù)互為別名。一個(gè)對(duì)象能夠通過多個(gè)對(duì)象引用變數(shù)進(jìn)行訪問。別名機(jī)制非常有用,但是要小心處理。當(dāng)利用其中任意一個(gè)引用改變其所指的對(duì)象時(shí),同時(shí)也使所有的引用指向的對(duì)象發(fā)生了改變。75垃圾收集當(dāng)對(duì)象的最後一個(gè)引用丟失,它不能被程式再使用。這個(gè)對(duì)象沒有任何使用價(jià)值,成為垃圾。Java自動(dòng)執(zhí)行垃圾對(duì)象回收,將其所占的記憶體空間釋放給系統(tǒng),以便資源重用。76

一個(gè)String對(duì)象一旦建立後,它的長(zhǎng)度和值是不可改變的。因而稱一個(gè)String對(duì)象是不可變的。String類提供了方法(P77)可以返回新的String對(duì)象,這些新對(duì)象是原來(lái)對(duì)象字元值修改的結(jié)果。但是可以利用String類提供的方法返回新的String對(duì)象,這些新對(duì)象是對(duì)原來(lái)對(duì)象字串修改的結(jié)果。

3.2String類77字元索引String類方法使用字元索引的概念處理字串。一個(gè)字元可以由該字元在字串中的位置(即索引)來(lái)確定?!八饕睆?開始,往右遞增。例題3.1783.3包類庫(kù)由一組支持程式開發(fā)的類組成。Java標(biāo)準(zhǔn)類庫(kù)是開發(fā)環(huán)境的一部分。有些類不是Java語(yǔ)言的內(nèi)建部分,而是Java標(biāo)準(zhǔn)類庫(kù)類庫(kù)可以從第三方軟體商獲得,也可以自己編寫。類庫(kù)由幾組相關(guān)的類族構(gòu)成,成為JavaAPI(應(yīng)用程式介面)。Java標(biāo)準(zhǔn)類庫(kù)的類被劃分為包,每個(gè)類屬於一個(gè)具體的包。見P80圖3.279PackagesPackagejava.langjava.appletjava.awtjavax.swingjava.utiljavax.xml.parsersPurposeGeneralsupportCreatingappletsforthewebGraphicsandgraphicaluserinterfacesAdditionalgraphicscapabilitiesNetworkcommunicationUtilitiesXMLdocumentprocessing80編寫Java程式時(shí),java.lang包中的類自動(dòng)成為可用類如果要使用其他包中的類,則必須完整地聲明相應(yīng)類的引用。

java.util.Scanner或者使用import導(dǎo)入該類,然後使用該類名。

importjava.util.Scanner;如果來(lái)自兩個(gè)包的兩個(gè)類的名稱相同,則要在程式中寫出完整的類引用名。import聲明可以使用”*”,表示程式可能使用指定包中的任何類。例如:importjava.util.*3.3.2Import聲明813.4Randam類該類是java.util包中的類,模擬一個(gè)偽亂數(shù)發(fā)生器。一個(gè)偽亂數(shù)發(fā)生器通過執(zhí)行複雜計(jì)算來(lái)產(chǎn)生模擬一個(gè)亂數(shù)。偽亂數(shù)發(fā)生器基於一個(gè)種子,在執(zhí)行一系列複雜計(jì)算後,將會(huì)產(chǎn)生模擬亂數(shù)。

P82圖3.3列出了Random類的部分方法。

nextInt方法:無(wú)參數(shù)產(chǎn)生的亂數(shù)分佈在整個(gè)int類型的取值範(fàn)圍。82有參數(shù)n

產(chǎn)生一個(gè)分佈在0-n-1區(qū)間的亂數(shù)。n是得到返回值的個(gè)數(shù)??梢酝ㄟ^在亂數(shù)上加減一個(gè)適當(dāng)?shù)闹祦?lái)實(shí)現(xiàn)。nextFloat方法返0.0-1.0區(qū)間的浮點(diǎn)亂數(shù)??梢話?cǎi)用乘法對(duì)浮點(diǎn)亂數(shù)進(jìn)行比例放大,截?cái)嘈?shù)後轉(zhuǎn)換成int型亂數(shù)。然後採(cǎi)用與整型亂數(shù)相同的處理方法將亂數(shù)取值區(qū)間移動(dòng)到所需要的區(qū)間。例題3.2833.5Math類Math類定義在Java標(biāo)準(zhǔn)類庫(kù)的java.lang包中,提供了大量用於計(jì)算的基本數(shù)學(xué)函數(shù)。Math類的所有方法都是靜態(tài)方法(Static方法,類方法),靜態(tài)方法可以用類名直接調(diào)用,不需要事先實(shí)例化類的對(duì)象。

value=Math.cos(90)+Math.sqrt(delta);Math類的方法的返回值可以根據(jù)需要用於運(yùn)算式。

P83圖3.4列出了部分方法。

例題3.3843.6格式化輸出NumberFormat類該類提供了通用的數(shù)據(jù)格式化能力,NumberFormat對(duì)象不是用new運(yùn)算符實(shí)例化,而是通過類名調(diào)用靜態(tài)方法來(lái)請(qǐng)求執(zhí)行。該類的getCurrencyInstance

方法和getPercentInstance方法分別用於返回格式器對(duì)象用於格式化貨幣值和格式化百分率值。

NumberFormat類和DecimalFormat類用於格式化資訊,使得顯示出來(lái)的資訊格式編排清晰、合理。這兩個(gè)類是定義在Java標(biāo)準(zhǔn)類庫(kù)的類,定義在java.text包中。85通過格式器對(duì)象調(diào)用格式化方法,將返回一個(gè)String型的字串,該字串表示格式化後的數(shù)。例題3.4DecimalFormat類該類需要用new運(yùn)算符創(chuàng)建對(duì)象。該類的構(gòu)造方法接收一個(gè)String型參數(shù),該參數(shù)確定了控制格式化處理的模式。調(diào)用format方法可以格式化一個(gè)具體的值。還可以根據(jù)需要調(diào)用applyPattern方法,改變格式化對(duì)象的模式。

例題3.5(P87)86除了print方法和println方法。System類提供了printf方法該方法允許用戶列印出含有數(shù)值的格式字串。它的第一個(gè)參數(shù)值指定格式字串,其餘的參數(shù)指定將插入到格式字串中的數(shù)值。

System.out.printf(“ID:%5d\tName:%s”,id,name)在java中添加printf方法以支持遺產(chǎn)系統(tǒng)的移植。3.6.3prinft方法87Java提供一種枚舉型數(shù)據(jù)類型,用於聲明枚舉型變數(shù)。枚舉型聲明通過列舉出變數(shù)所有可能的取值,為枚舉變數(shù)建立所有的枚舉值。枚舉值可以定義為所希望的任何識(shí)別字。

enumSeason{winter,spring,summer,fall};

枚舉變數(shù)的枚舉值沒有個(gè)數(shù)的限制。定義了枚舉類型,就可以用該類型聲明枚舉變數(shù)。

Seasontime;

枚舉值通過枚舉類型名訪問。

例:time=Season.spring;3.7枚舉型88枚舉型的每個(gè)枚舉值在Java內(nèi)部保存為代表枚舉值序數(shù)的整型數(shù)。第一個(gè)枚舉值的序數(shù)值為0,第二個(gè)為2,依此類推。儘管枚舉值對(duì)應(yīng)著一個(gè)有效的序數(shù)值,單不能在程式中將一個(gè)數(shù)值賦給一個(gè)枚舉型變數(shù)。枚舉型是一個(gè)特殊的類,枚舉型變數(shù)是對(duì)象變數(shù)。主要方法有:

ordinal方法返回與一個(gè)枚舉型值相關(guān)聯(lián)的序數(shù)值。

name方法返回枚舉值名。例題3.6枚舉類型是一種安全類型,任何一種試圖使用枚舉值之外某個(gè)值的操作都將導(dǎo)致編譯錯(cuò)誤。893.8.1包裝類的創(chuàng)建和使用

Java使用基本數(shù)據(jù)類型表示數(shù)據(jù)。當(dāng)同時(shí)管理兩類數(shù)據(jù)(基本類型和對(duì)象引用)是一種挑戰(zhàn)。當(dāng)一個(gè)用於包含其他各種類型對(duì)象的容器要求包含一個(gè)簡(jiǎn)單的整型值時(shí),需要將基本數(shù)據(jù)值“包裝”成對(duì)象。包裝類是代表一種具體的基本數(shù)據(jù)類型,包裝類的構(gòu)造方法接受並保存一個(gè)基本類型的值。3.8包裝類903.8包裝類包裝類屬於java.lang標(biāo)準(zhǔn)包。PrimitiveTypeWrapperClassbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBooleanvoidVoidVoid類不能夠被實(shí)例化,它代表一個(gè)空引用。913.8包裝類一個(gè)包裝類允許將基本類型數(shù)據(jù)作為對(duì)象管理。IntegerageObj=newInteger(40);包裝類提供了各種與管理基本類型對(duì)應(yīng)的方法。圖3.8Integer類的部分方法圖3.8中,注意:靜態(tài)方法可以通過類名直接調(diào)用。例:num=Integer.parseInt(“978”);將串“978”轉(zhuǎn)換成了整型數(shù)978,並賦值給變數(shù)num92包裝類定義了很多有用的靜態(tài)常量。Integer類有靜態(tài)常量MIN_VALUE,MAX_VALUE,分別代表int型數(shù)據(jù)的最小值和最大值。

93自動(dòng)包裝是基本數(shù)據(jù)類型與相應(yīng)的包裝對(duì)象之間的自動(dòng)轉(zhuǎn)換。

Integerobj; intnum=42; obj=num;與上述類型轉(zhuǎn)換相反的轉(zhuǎn)換成為拆除包裝,當(dāng)需要時(shí)也能自定進(jìn)行轉(zhuǎn)換?;绢愋团c對(duì)象類型之間的賦值通常是不相容的,自動(dòng)包裝只能在基本類型與包裝類之間進(jìn)行。

3.8.2自動(dòng)包裝94Java程式不但是具有命令行應(yīng)用程式,也可以具有圖形組件。在本書的各章末尾將探討建立圖形用戶介面(GUI)組件可以看成是構(gòu)成具有GUI的java應(yīng)用程式的控件。GUI組件包括標(biāo)籤(label),按鈕(button)、單行文本(textfield)、滾動(dòng)條(scrollbar)和菜單(menu)等Java組件以及有關(guān)GUI類主要定義在java.awt和javax.swing抽象窗口工具包(AWT)是JavaGUI的原始版容器:是一個(gè)保存和組織其他組件的特殊組件??蚣埽╢rame)和麵板(panel)都是容器。3.9組件和容器95框架是一個(gè)容器,用於顯示基於GUI的Java應(yīng)用程式介面。一個(gè)框架顯示為具有標(biāo)題欄的獨(dú)立窗口,可以根據(jù)需要在螢?zāi)簧现囟ㄎ缓透淖兇翱诘拇笮 ?蚣苡肑Frame類定義。面板不能獨(dú)立顯示。必須加載到一個(gè)可以顯示它的容器中,隨著包含該面板的容器移動(dòng)。其作用是在一個(gè)GUI中協(xié)助組織其他組件。面板用JPanel類定義。3.9.1框架和麵板96容器可以分為兩類:重量級(jí)容器重量級(jí)容器由操作系統(tǒng)管理。如frame羽量級(jí)容器由Java程式管理。如panel通常通過創(chuàng)建一個(gè)顯示GUI的框架來(lái)建立一個(gè)Java圖形應(yīng)用程式。容器只有在輔助組織和顯示其他組件時(shí)候才有用。標(biāo)籤組件用於顯示用戶介面的一行文本,也可以顯示一副圖像。例題3.7

97佈局管理器對(duì)象對(duì)容器進(jìn)行管理,協(xié)調(diào)容器內(nèi)部的組件部署位置。一般情況下,面板中的組件都是按行順序進(jìn)行排列除非一行的寬度容納不下或者程式員特別指定。3.9.2佈局管理器983.10嵌套的面板可以對(duì)面板進(jìn)行嵌套,建立一個(gè)複雜的組件容器層次結(jié)構(gòu)。見例3.8(95)99Java支持使用JPEG和GIF格式的圖像。一個(gè)標(biāo)籤可以含有文本或圖像,或者同時(shí)包含文本和圖像。由Graphics類提供drawImage方法繪製圖形。圖像可以加入到一個(gè)標(biāo)籤組件,標(biāo)籤組件可以包含文字和圖像。

ImageIcon類代表一個(gè)包含在標(biāo)籤中的圖像,該類的構(gòu)造方法接受一個(gè)圖像檔案名參數(shù),並將參數(shù)指定的圖像檔裝入到ImageIcon對(duì)象中。ImageIcon對(duì)象可以顯示JPEG或GIF圖像。3.11圖像100可以使用標(biāo)籤的各種方法設(shè)置圖像的位置以及對(duì)齊方式例題3.9

4.1類和對(duì)象的核心概念4.2類的分析4.3封裝4.4方法剖析4.5構(gòu)造方法的關(guān)鍵概念4.6圖形對(duì)象4.7圖形用戶介面4.8按鈕4.9單行文本框主要內(nèi)容:1024.1類和對(duì)象的核心概念面向?qū)ο蟪淌介_發(fā)的實(shí)質(zhì)是設(shè)計(jì)和實(shí)現(xiàn)自己的類,以滿足用戶的特殊需求的過程。類是現(xiàn)實(shí)世界某些對(duì)象的共同特徵(屬性和操作)的表示,對(duì)象是類的實(shí)例。類與對(duì)象的關(guān)係:類是對(duì)象的藍(lán)圖;對(duì)象是這個(gè)類代表概念的一次實(shí)現(xiàn),也稱類的對(duì)象化或?qū)嵗瘜?duì)象是有狀態(tài)的,對(duì)象的狀態(tài)是由對(duì)象的屬性值確定。Java中,一個(gè)對(duì)象的屬性由類中所聲明的變數(shù)定義。103對(duì)象具有行為,行為由對(duì)象可執(zhí)行的操作確定。一個(gè)對(duì)象的操作可能改變?cè)搶?duì)象的狀態(tài)。在Java中,對(duì)象的操作由類中聲明的方法定義。104例題4.1每個(gè)類有數(shù)據(jù)和方法聲明,數(shù)據(jù)聲明定義了將保存到每個(gè)對(duì)象中的數(shù)據(jù),方法聲明定義了對(duì)象將提供的服務(wù)。類的數(shù)據(jù)和方法稱為類的成員。

4.2類的分析105類的成員數(shù)據(jù)和方法聲明--類的成員--圖4.2intsize,weight;charcategory;DatadeclarationsMethoddeclarations數(shù)據(jù)聲明定義了保存在每個(gè)對(duì)象中的數(shù)據(jù)。方法聲明定義了對(duì)象將提供的服務(wù)。106例題4.2

構(gòu)造函數(shù):是一類特殊的方法,函數(shù)名和類對(duì)象相同。在使用new運(yùn)算符創(chuàng)建一個(gè)新的類對(duì)象時(shí)候,調(diào)用構(gòu)造方法。類中的其他方法定義了類對(duì)象提供的各種服務(wù)。注意:

類中的每個(gè)方法都應(yīng)該用一段代碼說(shuō)明方法的功能,這樣使得代碼段分塊清晰,便於查找各個(gè)方法。

面向?qū)ο蟪淌皆O(shè)計(jì)是基於類的定義,類代表了有合理的狀態(tài)和行為定義的對(duì)象。107Java中常將一個(gè)類保存為一個(gè)檔。當(dāng)一個(gè)檔保存了多個(gè)類,則只有一個(gè)類可以用保留字Public來(lái)聲明,而且public類的名必須與檔案名相一致。4.2.1實(shí)例數(shù)據(jù)創(chuàng)建類實(shí)例時(shí)將為類中聲明的變數(shù)分配記憶體空間,稱類中聲明的變數(shù)為實(shí)例數(shù)據(jù)。每個(gè)對(duì)象都有分配記憶體空間,因此每個(gè)對(duì)象可以保存不同的實(shí)例數(shù)據(jù)值。1084.2.2UML圖UML(UnifiedModelingLanguage)代表統(tǒng)一建模語(yǔ)言.描述類和對(duì)象之間的關(guān)係。一個(gè)類用一個(gè)矩形來(lái)表示,由類名、屬性(數(shù)據(jù))和操作(方法)。類之間的關(guān)係由箭頭來(lái)表示。虛線表示一個(gè)類使用另一個(gè)類的方法。109UMLClassDiagrams描述RollingDice程式所包含類的UML類圖RollingDicemain(args:String[]):voidDiefaceValue:introll():intsetFaceValue(intvalue):voidgetFaceValue():inttoString():StringUML圖中,變數(shù)的類型寫在變數(shù)名後,並用冒號(hào)隔開。方法的返回值類型也採(cǎi)用相同的方法表示。110一個(gè)對(duì)象應(yīng)該封裝起來(lái),以防止類之外的代碼對(duì)該對(duì)象的數(shù)據(jù)進(jìn)行不適當(dāng)?shù)脑L問,這種特性稱為--封裝。Encapsulation(封裝)MethodsDataClient封裝:把對(duì)象的所有組成部分組合在一起,封裝定義程式如何引用對(duì)象的數(shù)據(jù)。111在Java中,使用修飾符實(shí)現(xiàn)對(duì)象封裝。修飾符是Java保留字,用於規(guī)定程式設(shè)計(jì)語(yǔ)言構(gòu)造的具體特徵。私有數(shù)據(jù)

方法封裝實(shí)際上是將類的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類的修改和訪問數(shù)據(jù)的程度。

方法數(shù)據(jù)對(duì)象A對(duì)象B公有數(shù)據(jù)112Java中有些修飾符能夠控制對(duì)類成員的訪問,被稱為可見性修飾符。Java有三種可見性修飾符:Public,private,protectedpulic允許外部的代碼訪問或修改類中的數(shù)據(jù)值,破壞了類的封裝性。private

只能由類的內(nèi)部訪問,不能被外部訪問。Protected

與繼承相關(guān)。將在第八章討論。4.3.1可見性修飾符113實(shí)例變數(shù)如果聲明為private可見性,可以提高類的封裝性。一個(gè)方法的可見性取決於該方法的用途,為客戶提供服務(wù)的方法必須聲明為public,這種方法稱為服務(wù)方法。Private方法用途是協(xié)助類的其他方法工作,通常被稱為支持方法。

封裝性對(duì)於常量基本無(wú)意義。

114VisibilityModifierspublicprivateVariablesMethodsProvideservicestoclientsSupportothermethodsintheclassEnforceencapsulationViolateencapsulationUML類圖中,在成員名字前加符號(hào)“+”,表示public可見性,加符號(hào)“-”表示private可見性。1154.3.2訪問器和修改器實(shí)例數(shù)據(jù)通常聲明為private可見性,一個(gè)類通常提供一些服務(wù)用於訪問和修改實(shí)例數(shù)據(jù)值。訪問器方法返回當(dāng)前變數(shù)的值。修改器方法修改變數(shù)的值。訪問器命名的形式為:getXX是要訪問的數(shù)據(jù)成員的名。修改器命名的形式為:setXX是要修改的數(shù)據(jù)成員的名。這類方法有時(shí)被稱為獲取器和設(shè)置器。1164.4方法剖析一個(gè)方法是給定的一個(gè)名稱的一組編程語(yǔ)言語(yǔ)句,方法聲明指定了調(diào)用本方法時(shí)要執(zhí)行的代碼。當(dāng)一個(gè)方法被調(diào)用時(shí),執(zhí)行控制流就會(huì)轉(zhuǎn)移到該方法,並逐條執(zhí)行該方法中語(yǔ)句。當(dāng)方法執(zhí)行完後,控制返回到調(diào)用該方法的位置,繼續(xù)執(zhí)行後續(xù)的程式。117myMethod();myMethodcompute

MethodControlFlow如果被調(diào)用的方法和調(diào)用方法屬於同一個(gè)類,可以直接用方法名進(jìn)行調(diào)用。118doIt

helpMehelpMe();

obj.doIt();main

MethodControlFlow被調(diào)用方法和調(diào)用方法不屬於同一個(gè)類,則需要通過另一個(gè)類的對(duì)象名調(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返回語(yǔ)句在方法聲明頭中指定返回值類型,該類型可以是基本數(shù)據(jù)類型、類名、或保留字void(返回空值)。有返回值的方法必須由一條返回語(yǔ)句。當(dāng)執(zhí)行return語(yǔ)句時(shí),控制立即返回到調(diào)用方法中的調(diào)用語(yǔ)句,並繼續(xù)往下執(zhí)行。返回語(yǔ)句由保留字return和後續(xù)的運(yùn)算式組成,運(yùn)算式確定了返回的值。returnexpression;一個(gè)方法的返回值的類型必須與方法聲明頭規(guī)定的返回值類型一致。1224.4.2參數(shù)參數(shù)是調(diào)用一個(gè)方法時(shí)候傳遞給該方法的值。方法聲明頭中的參數(shù)列表指定了將傳遞給方法的參數(shù)值和參數(shù)名,被調(diào)用的方法根據(jù)參數(shù)名引用參數(shù)。行參:方法聲明頭中的參數(shù)名稱實(shí)參:在一次方法調(diào)用中,實(shí)際傳遞給方法的參數(shù)方法調(diào)用和定義的形式是在方法名後的圓括號(hào)中給出參數(shù)列表。123如果沒有參數(shù),仍需保留括弧。形參是識(shí)別字,用作方法中的變數(shù)。一個(gè)方法的形參初始值由調(diào)用該方法的實(shí)參賦予。實(shí)參可以實(shí)常量值、變數(shù)或者運(yùn)算式。調(diào)用方法的參數(shù)的列表必須與方法聲明時(shí)的參數(shù)列表相匹配。124Parameters調(diào)用一個(gè)方法時(shí),將把實(shí)參複製給被調(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ù)是局部數(shù)據(jù)。一個(gè)方法聲明頭中的形式參數(shù)名作為該方法的局部變數(shù)名,僅當(dāng)進(jìn)行方法調(diào)用時(shí)形參才存在,方法調(diào)用結(jié)束時(shí)形參消亡。在類中聲明的實(shí)例數(shù)據(jù)在全類中可以訪問,在方法中聲明的數(shù)據(jù)只能局限在該方法中。由於局部變數(shù)和實(shí)例變數(shù)有不同級(jí)別的引用範(fàn)圍,在方法中聲明的局部變數(shù)名可以與類級(jí)聲明的實(shí)例變數(shù)同名。1264.4.4銀行帳戶實(shí)例下麵討論一個(gè)例子以及該類的使用方法。Account類代表一個(gè)幾本的銀行帳戶。該類實(shí)例包括帳號(hào)、當(dāng)前餘額、帳戶戶主的姓名。類的服務(wù)包括存款、取款以及計(jì)算利息。1274.5構(gòu)造方法的關(guān)鍵概念構(gòu)造方法用於初始化與每個(gè)對(duì)象有關(guān)的變數(shù)。構(gòu)造方法的兩個(gè)特點(diǎn):

1:構(gòu)造方法名與類名相同。

2:構(gòu)造方法不能返回值。不能在構(gòu)造方法的聲明中指定void返回類型。不必為每個(gè)類定義構(gòu)造方法,每個(gè)類都有一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造方法。1284.6圖形對(duì)象一些對(duì)象是有圖形介面的,他們的狀態(tài)與行為包含其視覺外觀的資訊描述。許多GUI組件是圖形對(duì)象。如框架、面板、標(biāo)籤以及圖形。129SmilingFaceExampleTheSmilingFaceprogramdrawsafacebydefiningthepaintComponentmethodofapanelSeeSmilingFace.java(page117)SeeSmilingFacePanel.java(page118)在SmilingFace類中main方法只是生成程式框架,然後在該框架中生成並顯示

SmilingFacePanel類的一個(gè)實(shí)例。TheSmilingFacePanel類繼承了JPanel類。130SmilingFaceExample每一個(gè)Swing組件都有一個(gè)paintComponent方法。

paintComponent接收一個(gè)

Graphics類型的對(duì)象作為參數(shù),該類對(duì)象代表一個(gè)組件的圖形上下文。paintComponent除了設(shè)置面板的背景色之外,還通過各種方法繪製笑臉和文字。注意在面板上繪圖和往面板上添加組件到面板的區(qū)別。131SplatExample該程式在面板上繪製了一系列的填充圓,每一個(gè)圓都是一個(gè)單獨(dú)的對(duì)象。paintComponent方法讓每個(gè)circle對(duì)象繪製本身。SeeSplat.java(page121)SeeSplatPanel.java(page121)SeeCircle.java(page122)1324.7圖形用戶介面在java中建立圖形用戶介面至少需要三種類型的對(duì)象組件事件監(jiān)聽器GUI組件是用於顯示資訊的螢?zāi)辉?。labels,buttons,textfields,menus,etc.容器是一種特殊的組件,用於容納和管理其他組件。

frames,panels,applets,dialogboxes133事件事件時(shí)一個(gè)對(duì)象,代表我們關(guān)心的某個(gè)事件的發(fā)生。Forexample,wemaywantourprogramtoperformsomeactionwhenthefollowingoccurs:themouseismovedthemouseisdraggedamousebuttonisclickedagraphicalbuttonisclickedakeyboardkeyispressedatimerexpires大部分組件會(huì)根據(jù)用戶的動(dòng)作產(chǎn)生與該組件相關(guān)的事件。134一個(gè)程式基於圖形用戶介面來(lái)處理用戶事件稱為事件驅(qū)動(dòng)。監(jiān)聽器是一個(gè)對(duì)象,他等待某個(gè)事件的發(fā)生並作出某種反應(yīng)。要認(rèn)真建立監(jiān)聽器、監(jiān)聽器所監(jiān)聽的事件以及產(chǎn)生該事件的組件之間的聯(lián)繫。135EventsandListenersComponentAcomponentobjectmaygenerateaneventListenerAcorrespondinglistenerobjectisdesignedtorespondtotheeventEventWhentheeventoccurs,thecomponentcallstheappropriatemethodofthelistener,passinganobjectthatdescribestheevent136大多數(shù)情況下將使用java類庫(kù)定義的組件和事件。使用GUI創(chuàng)建Java程式工作流程:實(shí)例化並設(shè)置需要的組件。實(shí)現(xiàn)監(jiān)聽器類,定義某種事件發(fā)生時(shí)候程式該採(cǎi)取的動(dòng)作。建立監(jiān)聽器類與產(chǎn)生用戶關(guān)心事件的組件之間的聯(lián)繫。137按鈕是一種允許用戶通過滑鼠點(diǎn)擊發(fā)出動(dòng)作的組件。按鈕用JButton類定義。當(dāng)JButton被按下時(shí)候會(huì)產(chǎn)生一個(gè)動(dòng)作事件

PushCounter執(zhí)行後顯示一個(gè)按鈕,用戶每點(diǎn)擊按鈕一次,計(jì)數(shù)器就會(huì)被更形並顯示點(diǎn)擊次數(shù)。SeePushCounter.java(page125)SeePushCounterPanel.java(page125)4.8按鈕138PushCounterExample程式中使用的組件包括一個(gè)按鈕,一個(gè)用於顯示次數(shù)的標(biāo)籤,一個(gè)組織介面的面板以及一個(gè)用於顯示該面板的框架。

PushCounterPanel

類用實(shí)現(xiàn)面板的功能,用來(lái)顯示按鈕和標(biāo)籤。PushCounterPanel

類繼承了JPanel類

PushCounterPanel類的構(gòu)造方法建立了圖形用戶介面。並且初始化計(jì)數(shù)器為0.139PushCounterExampleButtonListener

類用於監(jiān)聽按鈕按下的事件。將ButtonListener類定義為內(nèi)部類:在一個(gè)類的內(nèi)部定義一個(gè)類??梢詫?duì)其所在的類的所有成員變數(shù)擁有了訪問許可權(quán)。監(jiān)聽器與GUI組件交互非常方便。內(nèi)部類只在兩個(gè)關(guān)係緊密且不需要被外部的其他類訪問時(shí)候參使用時(shí)。140PushCounterExample編寫監(jiān)聽器類需要實(shí)現(xiàn)一個(gè)介面ButtonListener類實(shí)現(xiàn)

ActionListenerinterface介面中定義了一系列需要在實(shí)現(xiàn)他的類中定義的方法。ActionListener介面中只聲明了

actionPerformedmethodJava標(biāo)準(zhǔn)類庫(kù)中為很多事件都定義了介面。141PushCounterExamplePushCounterPanelconstructor:instantiatestheButtonListenerobjectestablishestherelationshipbetweenthebuttonandthelistenerbythecalltoaddActionListenerWhentheuserpressesthebutton,thebuttoncomponentcreatesanActionEventobjectandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodincrementsthecounterandresetsthetextofthelabel1424.9單行文本單行文本允許用戶一次輸入一行文本。當(dāng)游標(biāo)在單行文本框裏,用戶按下enterkey,會(huì)產(chǎn)生一個(gè)動(dòng)作事件。SeeFahrenheit.java(page127)SeeFahrenheitPanel.java(page128)143FahrenheitExampleLikethePushCounterexample,theGUIissetupinaseparatepanelclassTheTempListenerinnerclassdefinesthelistenerfortheactioneventgeneratedbythetextfieldTheFahrenheitPanelconstructorinstantiatesthelistenerandaddsittothetextfieldWhentheusertypesatemperatureandpressesenter,thetextfieldgeneratestheactioneventandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodcomputestheconversionandupdatestheresultlabel

5.1布爾運(yùn)算式5.2if語(yǔ)句5.3數(shù)據(jù)比較5.4switch語(yǔ)句5.5while語(yǔ)句5.6迭代器5.7do語(yǔ)

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論