面向对象的程序设计课件_第1页
面向对象的程序设计课件_第2页
面向对象的程序设计课件_第3页
面向对象的程序设计课件_第4页
面向对象的程序设计课件_第5页
已阅读5页,还剩378页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第一章HelloJavaJava語言及其家族的發展史;主要的運行平臺;程式運行環境的安裝;一個簡單的java程式及其運行;Java語言基礎知識;面向對象程式設計思想。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;不再有函數、不再有指針、不再有多重繼承(inherit);不再有goto;不再有操作符重載(OperatiorOverloading);取消自動類型轉換,要求強制轉換。結論:Java=“C++”-”複雜性和奇異性”+“安全性和可移植性”4Historyofjava1991:Oaklanguage;1994:OaknamedJava;1995:Java正式發佈,Microsoft,IBM,Netscape,NovellApple,DEC紛紛購買使用權.1996:Sun成立Javasoft分公司5主要的運行平臺J2EE(Java2EnterpriseEdition)—企業計算J2SE(Java2StandardEdition)—桌面計算J2ME(Java2MicroEdition)—嵌入計算6程式運行環境的安裝—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程式運行環境的安裝安裝完JDK後,

命令行輸入cmd程式運行過程是:

先編譯javacWelcome.java->

成功后会生成Welcome.class可執行檔,我們再輸入javaWelcome即可執行這個檔。〔如圖〕9程式運行環境的安裝如果發生錯誤,請檢查環境變數有沒有設置好。先觀察一下安裝jdk的目錄結構:C:\javabinlibclasses.zipjavacjavaappletviewer用戶類檔所在目錄myclasses當前目錄10程式運行環境的安裝環境變數具體設置

方法是:EditPathVariable=\jdkinstallfold\bin;11程式運行環境的安裝AddCLASSPATHVariable

=.;\jdkinstallfold\lib;

\myjavaprogramclass12Java語言的運行時環境:java虛擬機25頁JavasourcecodeMachinecodeJavabytecodeBytecodeinterpreterBytecodecompilerJavacompiler13JDK1.2(~V1.3.0,V1.3.1,V1.4.2,V1.5.0)Jcreator:圖形化的Java程式的編輯環境

Forte:Sun功能強大的集成開發環境

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

WebLogic:適於開發伺服器端

VisualAge:與Webshpere結合,也適於客戶端

Symantec的VisualCafe、Oracle的

JDeveloper和OracleApplicationServerJava常用開發環境14例題1.1//********************************//Lincoln.javaAuthor:Lewis/Loftus////Demonstratesthebasicstructureofajavaapplication//**********************************************************PublicclassLincoln{////Printsapresidentialquote.//Publicstaticvoidmain(String[]args){system.out.println(“AquotebyAbrahamLincoln”);system.out.println(“whateveryouare,beagoodone.”);}}Java應用程式舉例15輸出結果:

AquotebyAbrahamLincolnWhateveryouare,beagoodman注意:

1:程式的開始幾行是注釋,由符號//開始到一行結束

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

注釋是獨立於代碼的,應當表現程式員編寫程式的初衷或者意圖。注釋的內容可以是任何文本,注釋將被電腦忽略,不影響程式的執行。Java有三種注釋的方式:1。//

注釋內容由//一直到此行結束2。/*和*/定義一個注釋塊3。/**開始,*/結束這種注釋方法可用來自動產生文檔17識別字和保留字--20頁識別字(Identifier):以字母(letter),下劃線(underline)(_),美元符($)開始的一個字元序列,後面可以跟字母,下劃線,美元符,數字(number)。Java對大小寫敏感,識別字命名應該具有描述性和可讀性。例如:Identifier,userName,User_Name,_sys_val,$change,2mail,room#,classrightrightwrong18識別字和保留字--20頁保留字(reservedword):特殊的有意義的識別字。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面向對象編程classCar{intcolor_number;intdoor_number;intspeed;

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

電腦中的對象的原型

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

方法封裝實際上是將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度。

方法數據對象A對象B公有數據23繼承(inheritance)子類是作為另一個類的擴充或修正所定義的一個類.bicycle(superclass)父類MountainbikesRacingbikesTandembikessubclass(子類)24繼承(inheritance)繼承是子類利用父類中定義的方法和變數就像它們屬於子類本身一樣.一個類可以通過繼承由其他類產生,而一個類本身還可以派生出更多的類,這樣就建立起類層次結構。classCar{intcolor_number;intdoor_number;intspeed;

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

classTrash_Car

extendsCar{doubleamount;fill_trash(){…}}25多態性(Polymorphism)多態性指用一種統一的方式引用有繼承關係的不同類型的對象。Java是一種面向對象編程語言,對象是java程式中最基本的實體。本課程的重點就是學習java的面向對象程式設計思想。學習方法:認真聽課,多上機實踐,及時鞏固。26課後自練:安裝java編程環境jdk1.5,並正確配置環境變數。鍵入教材17頁例1.1程式並在java虛擬機上編譯執行。試在你的機器上練習36頁的pp1.1,pp1.2,pp1.7,pp1.8.主要內容1:字串2:變數與賦值3:基本數據類型4:運算式5:數據類型轉換6:交互程式7:圖形8:JavaApplet9:繪圖282.1字串字元字元是指用單引號括起來單個字元,這裏的字元不是指占1個位元組的ASCII字元,而是指占2個位元組的Unicode字元。因為Unicode被設計用來處理現在世界上所有書面語言中的字元,所以一個漢字也是被當作一個字元來處理的。29

字串指的是字元的序列,有兩種類型的字串:一種是創建以後不需要改變的,稱為字串常量,在Java中,String類用於存儲和處理字串常量;另外一種字串是創建以後,需要對其進行改變的,稱為字串變數。一個字串是一個對象,由String類定義。在Java中常以雙引號作為字串的定界符。字串30

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

System.out對象代表一個輸出設備或者檔,默認的輸出設備是顯示器螢幕。2.1.1println和print方法println方法為我們執行了一個服務,向輸出設備發送一個println消息,請求輸出某個文本消息。Println與print的相同與區別相同點:都是向輸出對象發送一個消息,請求輸出某中消息不同點:println在輸出消息後換行,print保持游標在當前位置31當輸出長度大於一行的字串時,使用字串拼接。方法:使用字串拼接運算符號“+”將兩個字串拼接起來例如:“Theonlystupidquestionis”+”theonethat’snotasked.”2.1.2字串拼接輸出結果:Theonlystupidquestionistheonethat’snotasked.注意:如何區分符號“+”的作用如果“+”運算符的兩個運算元中至少有一個是字串,則執行字串拼接322.1.3轉義序列

在Java中使用轉義序列來表示特殊的字元。

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

識別字=運算式過程:基本賦值語句用賦值運算符號將運算式的計算結果保存到指定的識別字所代表的記憶體單元中,該識別字代表的記憶體單元通常是一個變數。

2.2.2賦值語句注意:不允許將一個值賦給一個類型不一致的變數。例如:

sides=10;36常量:

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

常量初始化賦值後,如果試圖修改常量的值,則編譯器會產生錯誤資訊。

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

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

在Java編程語言中有兩種浮點類型:float和double。

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

3.14159

(double型浮點數)

6.56f

(float型浮點數)

2浮點類double,float

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

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

布爾變數通常用於判斷一個具體條件是否為真,也可以用於標識任何一種有兩種狀態的情況。

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

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

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

i++(尾碼++)在使用i之後,使i的值加1,因此執行完i++後,整個運算式的值為i,而i的值變為i+1。

--i在使用i之前,使i的減1,因此執行完--i後,整個運算式和i的值均為i-1;

i--在使用i之後,使i的減1,因此執行完i--後,整個運算式的值為i,而i的值變為i-1。462.4.2運算符優先順序算術運算符遵循代數運算相同的運算規則。乘、除法和求餘運算符有相同的運算優先順序,優先順序別高於加減法。具有相同優先順序別的運算符按照從左到右的順序執行。在運算式中,可以使用括弧來強制性改變運算符的優先順序。當括弧嵌套使用時,運算式的計算從嵌套最內層的括弧開始。賦值運算符的運算優先順序比算術運算符的優先順序別低。注意引用不改變變數的值:如:sum=count+totalsum=sum+1

47482.5數據類型轉換2.5.1類型轉換的安全性基本數據類型間的類型轉換可分為兩類:

擴展類型轉換和壓縮類型轉換

擴展類型轉換是安全的類型轉換,因為在進行類型轉換時將使用相等的或者更大的存儲空間來保存類型轉換後的值,不會丟失資訊。

壓縮類型轉換是使用更少的存儲空間來保存類型轉換後的值,某些資訊被捨棄。49在Java中,數據轉換的方式有三種:1:賦值類型轉換。當將一個類型的變數賦給另一種類型的變數時,該值將會被轉換為新類型的值。只能進行擴展類型轉換。例如:money=dollars2:低級別類型向高級別類型的自動類型轉換當某種運算符為了進行運算需要修改其運算元類型時,將進行自動類型轉換。2.5.2數據類型的轉換技術50

強制類型轉換的格式是:(數據類型)變數名

經過強制類型轉換,將得到一個在“()”中聲明的數據類型的數據,該數據是從指定變數所包含的數據轉換而來的。值得注意的是,指定變數本身不會發生任何變化。將佔用位數較長的數據轉化成佔用位數較短的數據時,可能會造成數據超出較短數據類型的取值範圍,造成“溢出”。如:

longi=10000000000;intj=(int)i;

因為轉換的結果已經超出了int型數據所能表示的最大整數(4294967295),造成溢出,產生了錯誤。3:強制類型轉換512.6交互程式Scanner類是標準的Java類庫的類,提供了一些從不同數據源讀取各種類型數據的方法。首先必須創建Scanner類對象以便應用其方法。

Scannerscan=new

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

例題2.8

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

53

圖像的每個像素點都能映射到顯示器螢幕上的像素點上。與傳統座標相比較,java使用一套相對簡單的坐標系統。座標的圓點在繪圖區的左上角,所有的可見座標都是正值。Java語言使用一套相對簡單的坐標系統,所有的值都是正的。2.7.1坐標系統YX(0,0)11240(112,40)542.7.2顏色表示方法黑白圖形的一個像素用1位二進位位表示(white=0,black=1)彩色圖片需要更多資訊,因此產生了一些方法來表示它。三基色表示法。每種顏色可以由三種基本顏色表示出來:

紅色(Red),綠色(Green),藍色(Blue)Java用三個數字表示顏色值,稱為RGB

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

一個基色值可以表示這種基色的256級亮度。每種基色的亮度級的合成決定像素點的最終顏色。55Java使用Color類(包含在java.awt中),定義和管理顏色,Color類的每個對象代表一種顏色。Color類的每個對象代表一種顏色,該類創建了幾個實例用於提供一組預定義的顏色,如下所示:ObjectColor.blackColor.blueColor.cyanColor.orangeColor.whiteColor.yellowRGBValue0,0,00,0,2550,255,255255,200,0255,255,255255,255,0562.8Javaapplet

Java程式分為兩類:Java小應用程式(javaapplet)和Java應用程式。Java應用程式是一個擁有主方法的單獨程式。Javaapplet是一種可以通過Web軟體下載執行的可執行程式。2.8.1Javaapplet的基本概念使用Javaapplet是為了將Javaapplet嵌入HTML文檔,通過網路傳送並使用流覽器執行。Javaapplet可以通過JDK提供的appletviewer,來解釋執行。Javaapplet沒有主方法。但是還有一些特殊的方法用於構建applet。57paint方法在applet繪圖的時候將自動調用,繪製圖像內容。Pain方法接收的參數是一個Graphics對象。一個Graphics對象定義了用於交互的繪圖上下文環境,該環境將作為整個applet窗口環境。Graphics類有繪圖的方法提供給用戶使用。58Javaapplet在使用之前必須編譯成位元組碼格式,然後將位元組碼鏈接到一個HTML檔並通過Web進行傳送,一旦達到目的地,嵌入到Web流覽器中的Java解釋器將用於執行Javaapplet.

要使一個Javaapplet能通過Web傳送並由Web流覽器執行,必須在超文本標記語言文檔中引用applet。。2.8.2利用Web執行Java

applet59<html><head><title>TheEinsteinApplet</title></head><body><appletcode="Einstein.class"width=350height=175></applet></body></html>注意:1:applet標記規定存放在Einstein.class檔中的位元組碼由網路進行傳送。在電腦中執行。同時規定了applet的高度和寬度。2:applet引用的是位元組碼檔,而不是根源程式。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每一個繪圖組件上有一個背景色。每一個圖形上下文環境有一個當前的前景色。二者都可以清晰地看到。可以由Graphics類的setColor方法設置前景色,由setBackground方法設置背景色。見例題2.11

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

在Java中,變數名代表一個基本數據類型值或者是一個對象.

類名能被用於定義對象變數。

Stringtitle;上述語句並不創建任何對象。一個對象引用變數不能保存對象本身,而是保存該對象的地址。對象本身必須單獨創建。67通常我們使用new關鍵字來建立一個對象。建立一個對象稱為對相應“類”的實例化或對象化。Stringtitle=newString("JavaSoftwareSolutions");調用了String的構造函數,這一函數建立一個String類型的對象title,並對其初始化為“JavaSoftwareSolutions”

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

count=title.length()有些方法完成後產生返回值,有些方法則不產生返回值,方法的返回值可以用於運算式或者任務。一個方法的調用可以看成是讓對象執行某種服務。70在使用一個對象引用變數之前,必須完成初始化,使之指向一個有效的對象,不然系統將發出錯誤資訊。可以將對象引用變數設置為null,表示一個對象引用變數不指向任何對象。使用new運算符建立對象後,將調用類的構造方法初始化新對象。構造方法是一種特殊的方法,方法名與類名相同。幾點說明:

對象引用變數保存的是對象的地址,可以看成是指向對象存儲單元的指針。71在聲明時初始化對象,可以將聲明對象引用變數和創建對象合併。如:

Stringtitle=newString(“Java”);對於String對象,無須顯式地使用new運算符以及調用構造方法來創建對象,如:

StringCity=“BeiJing”;

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

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

3.2String類77字元索引String類方法使用字元索引的概念處理字串。一個字元可以由該字元在字串中的位置(即索引)來確定。“索引”從0開始,往右遞增。例題3.1783.3包類庫由一組支持程式開發的類組成。Java標準類庫是開發環境的一部分。有些類不是Java語言的內建部分,而是Java標準類庫類庫可以從第三方軟體商獲得,也可以自己編寫。類庫由幾組相關的類族構成,成為JavaAPI(應用程式介面)。Java標準類庫的類被劃分為包,每個類屬於一個具體的包。見P80圖3.279PackagesPackagejava.langjava.appletjava.awtjavax.swingjava.utiljavax.xml.parsersPurposeGeneralsupportCreatingappletsforthewebGraphicsandgraphicaluserinterfacesAdditionalgraphicscapabilitiesNetworkcommunicationUtilitiesXMLdocumentprocessing80編寫Java程式時,java.lang包中的類自動成為可用類如果要使用其他包中的類,則必須完整地聲明相應類的引用。

java.util.Scanner或者使用import導入該類,然後使用該類名。

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

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

nextInt方法:無參數產生的亂數分佈在整個int類型的取值範圍。82有參數n

產生一個分佈在0-n-1區間的亂數。n是得到返回值的個數。可以通過在亂數上加減一個適當的值來實現。nextFloat方法返0.0-1.0區間的浮點亂數。可以採用乘法對浮點亂數進行比例放大,截斷小數後轉換成int型亂數。然後採用與整型亂數相同的處理方法將亂數取值區間移動到所需要的區間。例題3.2833.5Math類Math類定義在Java標準類庫的java.lang包中,提供了大量用於計算的基本數學函數。Math類的所有方法都是靜態方法(Static方法,類方法),靜態方法可以用類名直接調用,不需要事先實例化類的對象。

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

P83圖3.4列出了部分方法。

例題3.3843.6格式化輸出NumberFormat類該類提供了通用的數據格式化能力,NumberFormat對象不是用new運算符實例化,而是通過類名調用靜態方法來請求執行。該類的getCurrencyInstance

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

NumberFormat類和DecimalFormat類用於格式化資訊,使得顯示出來的資訊格式編排清晰、合理。這兩個類是定義在Java標準類庫的類,定義在java.text包中。85通過格式器對象調用格式化方法,將返回一個String型的字串,該字串表示格式化後的數。例題3.4DecimalFormat類該類需要用new運算符創建對象。該類的構造方法接收一個String型參數,該參數確定了控制格式化處理的模式。調用format方法可以格式化一個具體的值。還可以根據需要調用applyPattern方法,改變格式化對象的模式。

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

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

enumSeason{winter,spring,summer,fall};

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

Seasontime;

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

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

ordinal方法返回與一個枚舉型值相關聯的序數值。

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

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

93自動包裝是基本數據類型與相應的包裝對象之間的自動轉換。

Integerobj; intnum=42; obj=num;與上述類型轉換相反的轉換成為拆除包裝,當需要時也能自定進行轉換。基本類型與對象類型之間的賦值通常是不相容的,自動包裝只能在基本類型與包裝類之間進行。

3.8.2自動包裝94Java程式不但是具有命令行應用程式,也可以具有圖形組件。在本書的各章末尾將探討建立圖形用戶介面(GUI)組件可以看成是構成具有GUI的java應用程式的控件。GUI組件包括標籤(label),按鈕(button)、單行文本(textfield)、滾動條(scrollbar)和菜單(menu)等Java組件以及有關GUI類主要定義在java.awt和javax.swing抽象窗口工具包(AWT)是JavaGUI的原始版容器:是一個保存和組織其他組件的特殊組件。框架(frame)和麵板(panel)都是容器。3.9組件和容器95框架是一個容器,用於顯示基於GUI的Java應用程式介面。一個框架顯示為具有標題欄的獨立窗口,可以根據需要在螢幕上重定位和改變窗口的大小。框架用JFrame類定義。面板不能獨立顯示。必須加載到一個可以顯示它的容器中,隨著包含該面板的容器移動。其作用是在一個GUI中協助組織其他組件。面板用JPanel類定義。3.9.1框架和麵板96容器可以分為兩類:重量級容器重量級容器由操作系統管理。如frame羽量級容器由Java程式管理。如panel通常通過創建一個顯示GUI的框架來建立一個Java圖形應用程式。容器只有在輔助組織和顯示其他組件時候才有用。標籤組件用於顯示用戶介面的一行文本,也可以顯示一副圖像。例題3.7

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

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

4.1類和對象的核心概念4.2類的分析4.3封裝4.4方法剖析4.5構造方法的關鍵概念4.6圖形對象4.7圖形用戶介面4.8按鈕4.9單行文本框主要內容:1024.1類和對象的核心概念面向對象程式開發的實質是設計和實現自己的類,以滿足用戶的特殊需求的過程。類是現實世界某些對象的共同特徵(屬性和操作)的表示,對象是類的實例。類與對象的關係:類是對象的藍圖;對象是這個類代表概念的一次實現,也稱類的對象化或實例化對象是有狀態的,對象的狀態是由對象的屬性值確定。Java中,一個對象的屬性由類中所聲明的變數定義。103對象具有行為,行為由對象可執行的操作確定。一個對象的操作可能改變該對象的狀態。在Java中,對象的操作由類中聲明的方法定義。104例題4.1每個類有數據和方法聲明,數據聲明定義了將保存到每個對象中的數據,方法聲明定義了對象將提供的服務。類的數據和方法稱為類的成員。

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

構造函數:是一類特殊的方法,函數名和類對象相同。在使用new運算符創建一個新的類對象時候,調用構造方法。類中的其他方法定義了類對象提供的各種服務。注意:

類中的每個方法都應該用一段代碼說明方法的功能,這樣使得代碼段分塊清晰,便於查找各個方法。

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

方法封裝實際上是將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度。

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

只能由類的內部訪問,不能被外部訪問。Protected

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

封裝性對於常量基本無意義。

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

MethodControlFlow如果被調用的方法和調用方法屬於同一個類,可以直接用方法名進行調用。118doIt

helpMehelpMe();

obj.doIt();main

MethodControlFlow被調用方法和調用方法不屬於同一個類,則需要通過另一個類的對象名調用。119方法頭Amethoddeclarationbeginswithamethodheadercharcalc(intnum1,intnum2,Stringmessage)methodnamereturntypeparameterlistTheparameterlistspecifiesthetypeandnameofeachparameterThenameofaparameterinthemethoddeclarationiscalledaformalparameter120方法體Themethodheaderisfollowedbythemethodbodycharcalc(intnum1,intnum2,Stringmessage){intsum=num1+num2;charresult=message.charAt(sum);returnresult;}Thereturnexpressionmustbeconsistentwiththereturntypesum

andresultarelocaldataTheyarecreatedeachtimethemethodiscalled,andaredestroyedwhenitfinishesexecuting1214.4.1返回語句在方法聲明頭中指定返回值類型,該類型可以是基本數據類型、類名、或保留字void(返回空值)。有返回值的方法必須由一條返回語句。當執行return語句時,控制立即返回到調用方法中的調用語句,並繼續往下執行。返回語句由保留字return和後續的運算式組成,運算式確定了返回的值。returnexpression;一個方法的返回值的類型必須與方法聲明頭規定的返回值類型一致。1224.4.2參數參數是調用一個方法時候傳遞給該方法的值。方法聲明頭中的參數列表指定了將傳遞給方法的參數值和參數名,被調用的方法根據參數名引用參數。行參:方法聲明頭中的參數名稱實參:在一次方法調用中,實際傳遞給方法的參數方法調用和定義的形式是在方法名後的圓括號中給出參數列表。123如果沒有參數,仍需保留括弧。形參是識別字,用作方法中的變數。一個方法的形參初始值由調用該方法的實參賦予。實參可以實常量值、變數或者運算式。調用方法的參數的列表必須與方法聲明時的參數列表相匹配。124Parameters調用一個方法時,將把實參複製給被調用方法的形參。charcalc(intnum1,intnum2,Stringmessage){intsum=num1+num2;charresult=message.charAt(sum);returnresult;}ch=obj.calc(25,count,"Hello");1254.4.3局部數據在方法內聲明的變數是局部數據。一個方法聲明頭中的形式參數名作為該方法的局部變數名,僅當進行方法調用時形參才存在,方法調用結束時形參消亡。在類中聲明的實例數據在全類中可以訪問,在方法中聲明的數據只能局限在該方法中。由於局部變數和實例變數有不同級別的引用範圍,在方法中聲明的局部變數名可以與類級聲明的實例變數同名。1264.4.4銀行帳戶實例下麵討論一個例子以及該類的使用方法。Account類代表一個幾本的銀行帳戶。該類實例包括帳號、當前餘額、帳戶戶主的姓名。類的服務包括存款、取款以及計算利息。1274.5構造方法的關鍵概念構造方法用於初始化與每個對象有關的變數。構造方法的兩個特點:

1:構造方法名與類名相同。

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

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

paintComponent接收一個

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

frames,panels,applets,dialogboxes133事件事件時一個對象,代表我們關心的某個事件的發生。Forexample,wemaywantourprogramtoperformsomeactionwhenthefollowingoccurs:themouseismovedthemouseisdraggedamousebuttonisclickedagraphicalbuttonisclickedakeyboardkeyispressedatimerexpires大部分組件會根據用戶的動作產生與該組件相關的事件。134一個程式基於圖形用戶介面來處理用戶事件稱為事件驅動。監聽器是一個對象,他等待某個事件的發生並作出某種反應。要認真建立監聽器、監聽器所監聽的事件以及產生該事件的組件之間的聯繫。135EventsandListenersComponentAcomponentobjectmaygenerateaneventListenerAcorrespondinglistenerobjectisdesignedtorespondtotheeventEventWhentheeventoccurs,thecomponentcallstheappropriatemethodofthelistener,passinganobjectthatdescribestheevent136大多數情況下將使用java類庫定義的組件和事件。使用GUI創建Java程式工作流程:實例化並設置需要的組件。實現監聽器類,定義某種事件發生時候程式該採取的動作。建立監聽器類與產生用戶關心事件的組件之間的聯繫。137按鈕是一種允許用戶通過滑鼠點擊發出動作的組件。按鈕用JButton類定義。當JButton被按下時候會產生一個動作事件

PushCounter執行後顯示一個按鈕,用戶每點擊按鈕一次,計數器就會被更形並顯示點擊次數。SeePushCounter.java(page125)SeePushCounterPanel.java(page125)4.8按鈕138PushCounterExample程式中使用的組件包括一個按鈕,一個用於顯示次數的標籤,一個組織介面的面板以及一個用於顯示該面板的框架。

PushCounterPanel

類用實現面板的功能,用來顯示按鈕和標籤。PushCounterPanel

類繼承了JPanel類

PushCounterPanel類的構造方法建立了圖形用戶介面。並且初始化計數器為0.139PushCounterExampleButtonListener

類用於監聽按鈕按下的事件。將ButtonListener類定義為內部類:在一個類的內部定義一個類。可以對其所在的類的所有成員變數擁有了訪問許可權。監聽器與GUI組件交互非常方便。內部類只在兩個關係緊密且不需要被外部的其他類訪問時候參使用時。140PushCounterExample編寫監聽器類需要實現一個介面ButtonListener類實現

ActionListenerinterface介面中定義了一系列需要在實現他的類中定義的方法。ActionListener介面中只聲明了

actionPerformedmethodJava標準類庫中為很多事件都定義了介面。141PushCounterExamplePushCounterPanelconstructor:instantiatestheButtonListenerobjectestablishestherelationshipbetweenthebuttonandthelistenerbythecalltoaddActionListenerWhentheuserpressesthebutton,thebuttoncomponentcreatesanActionEventobjectandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodincrementsthecounterandresetsthetextofthelabel1424.9單行文本單行文本允許用戶一次輸入一行文本。當游標在單行文本框裏,用戶按下enterkey,會產生一個動作事件。SeeFahrenheit.java(page127)SeeFahrenheitPanel.java(page128)143FahrenheitExampleLikethePushCounterexample,theGUIissetupinaseparatepanelclassTheTempListenerinnerclassdefinesthelistenerfortheactioneventgeneratedbythetextfieldTheFahrenheitPanelconstructorinstantiatesthelistenerandaddsittothetextfieldWhentheusertypesatemperatureandpressesenter,thetextfieldgeneratestheactioneventandcallstheactionPerformedmethodofthelistenerTheactionPerformedmethodcomputestheconversionandupdatestheresultlabel

5.1布爾運算式5.2if語句5.3數據比較5.4switch語句5.5while語句5.6迭代器5.7do語

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论