久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

Java程序設計課堂練習題課案(共5則范文)

時間:2019-05-12 21:09:35下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《Java程序設計課堂練習題課案(共)》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Java程序設計課堂練習題課案(共)》。

第一篇:Java程序設計課堂練習題課案(共)

《Java程序設計》練習題

《Java程序設計》練習題

第一章 Java編程基礎

一、選擇題

1、可以使用【

】實用程序編譯Java程序。A.java B.javac C.javadoc D.cmd

2、可以使用【

】實用程序運行java應用程序。A.java B.javac C.javadoc D.cmd

3、可以使用【

】實用程序從Java源文件代碼中抽取Java文檔注釋,生成相應的HTML幫助文檔。

A.java B.javac C.javadoc D.cmd

4、Java編譯單元(源程序文件)的擴展名為【

】 A..java B..class C..doc D..exe

5、編譯Java源程序文件產生的字節碼文件的擴展名為【

】 A..java B..class C..html D..exe

6、以下Java應用程序執行入口main方法的聲明中,正確的是【

】 A、public static void main()B、public static void main(String[] args)C、public static int main(String[] args)D、public void main(String[] args)

7、Java屬于以下哪種語言?【

A.機器語言 B.匯編語言 C.高級語言 D.以上都不對

8、下面哪種類型的文件可以在Java虛擬機中運行?【

】 A..java B..jre C..exe D..classs

9、Java程序中聲明包的關鍵字是【

A、java

B、package C、javadoc

D、cmd

10、如果JDK的安裝路徑為“d:jdk”,若想在命令窗口中任何當前路徑下,都可以直接使用javac和java命令,需要將環境變量path設置為以下哪個選項?【

A、d:jdk; B、d:jdkbin; C、d:jrebin; D、d:jre;

11、下列說法中,不正確的是【

】。

A、一個Java源文件編譯通過后,得到的結果文件數也只有一個 B、一個Java源文件經過編譯后,得到的文件的擴展名一定是.class C、一個Java源文件只能有一個public類定義,其類名與源文件名相同 D、一個Java源文件可以包含多個類

《Java程序設計》練習題

12、安裝好JDK后,在其bin目錄下有許多exe可執行文件,其中“java.exe”命令的作用是以下哪一種?【

】。A、Java文檔制作工具 B、Java解釋器 C、Java編譯器 D、Java啟動器

13、以下關于變量的說法錯誤的是【

】 A.變量名必須是一個有效的標識符 B.變量在定義時可以沒有初始值

C.變量一旦被定義,在程序中的任何位置都可以被訪問

D.在程序中,可以將一個byte類型的值賦給一個int型類型的變量,不需要特殊聲明

14、假設int x=2,三元表達式x>0?x+1:5的運行結果是以下哪一個?【

】 A.0 B.2 C.3 D.5

15、下面的運算符中,用于執行除法運算的是哪個?【

】 A./ B. C.% D.*

16、下面哪種寫法可以實現訪問數組arr的首個元素?【

】 A.arr[0] B.arr(0)C.arr[1] D.arr(1)

17、以下哪個選項可以正確創建一個長度為3的二維數組?【

】 A.new int[2][3] B.new int[3][] C.new int[ ][3] D.以上答案都不對

18、關于變量的作用域,下列說法錯誤的是【

】 A.類成員變量的作用域為類定義體 B.方法參數的作用域為方法體

C.對于for語句中定義的變量,當for語句執行完時,該變量就消亡了 D.在方法void f(int i)的for語句塊中,可以聲明變量“int i;”

19、Java字符類型采用的是Unicode編碼方案,每個Unicode碼占用的位數是【

】。

A.8

B.16 C.32 D.64 20、下列賦值語句中,不合法的是【

】。A.float f=1.2 B.float f2=1.2f C.double d=1.2 D.double d2=1.2f

二、填空題

1、Java的三個技術平臺分別是_java se___、__java ee__、__javame__。

2、Java程序的運行環境簡稱之為_jre___。

3、編譯Java程序需要使用__javac__命令。

《Java程序設計》練習題

4、_____path____環境變量用來存儲Java的編譯和運行工具所在路徑,而___classpath__環境變量則用來保存Java虛擬機要運行的“.class”文件路徑。

5、在Java語言中,main()方法的參數是表示命令行參數的String數組,其中,__args[0]__表示第一個參數。

6、Java應用程序的入口方法是_____main()__,用于控制程序的開始和結束。

7、Java系統運行時,通過__自頂垃圾收集___機制周期性地釋放無用對象所使用的內存,完成對象的清除。

8、Java中的程序代碼都必須在一個類中定義,類使用_class__關鍵字來定義。

9、布爾常量即布爾類型的兩個值,分別是__true__和__false___。

10、Java中的注釋可分為三種類型,分別是__單行___、___多行____、____文檔___。

三、判斷題

1、Java語言采用面向對象的思想編程,具有跨平臺、分布式、多線程等優點。

2、Java語言的語法與C或C++類似,也支持面向過程的程序設計技術。

3、Java提供了自動垃圾收集機制進行內存管理,減小了內存出錯的可能性。

4、Java語言的平臺無關性使得Java程序可以跨平臺運行。

5、Java虛擬機是實現Java語言平臺無關性的基礎。

四、簡答題

1、簡述JRE與JDK的區別。

JRE,它相當于操作系統部分,提供了Java程序運行時所需要的基本條件和許多Java基礎類,如果你只想運行別人開發好的Java程序,那么,你的計算機上必須且只需安裝JRE。

它包含編譯工具、解釋工具、文檔制作工具、打包工具等多種與開發相關的工具,是提供給Java開發人員使用的。初學者學習和使用Java語言時,首先必須下載和安裝JDK。JDK中已經包含了JRE部分,初學者安裝JDK后不必再去下載和安裝JRE了。

2、什么是方法重載?

方法重載指的是在一個類中可以聲明多個同名的方法,而方法中參數的個數或者數據類型不一致。調用這些同名的方法時,JVM會根據實際參數的不同綁定到不同的方法。

第二章 面向對象思想

一、選擇題

1、類的定義必須包含在以下哪種符號之間?【

A.方括號[] B.花括號{} C.雙引號“” D.圓括號()

《Java程序設計》練習題

2、在以下什么情況下,構造方法會被調用?【

】 A.類定義時 B.創建對象時 C.調用對象方法時 D.使用對象的變量時

3、在類的繼承關系中,需要遵循以下哪個繼承原則?【

】 A.多重 B.單一 C.雙重 D.不能繼承

4、在Java語言中,以下哪個關鍵字用于在方法上聲明拋出異常【

】 A、try B、catch C、throws D、throw

5、關于super關鍵字以下說法哪些是不正確的【

】。A.super關鍵字可以調用父類的構造方法 B.super關鍵字可以調用父類的普通方法

C.super與this不能同時存在于同一個構造方法中 D.super與this可以同時存在于同一個構造方法中

6、類中的一個成員方法被下面哪個修飾符修飾時,該方法只能在本類被訪問?【

】。

A.public B.protected C.private D.default

7、在Java中,要想讓一個類繼承另一個類,可以使用以下哪個關鍵字?【

】 A、inherits B、implements C、extends D、modifies

8、System類位于以下哪個包中?【

】。

A、java.io B、java.util C、java.awt D、java.lang

9、以下關于繼承的說法,正確的是【

】。A.繼承可以避免代碼復制和相關的代碼維護等問題 B.Java語言中一個子類可以繼承多個基類(多重繼承)C.Java語言不允許實現多個接口

D.子類可以繼承父類的方法,但不能重新改寫父類的方法

10、下列修飾符中,不能用來修飾類的是【

】。A.public B.abstract C.final D.static

二、填空題

1、面向對象的三大特征是__封裝___、___繼承___和____多態___。

2、在Java中,可以使用關鍵字__new___來創建類的實例對象。

3、定義在類中的變量被稱為__成員變量_____,定義在方法中的變量被稱為__局部變量___。

4、在非靜態成員方法中,可以使用關鍵字_this_訪問類的其他非靜態成員。

5、被static關鍵字修飾的成員變量被稱為__靜態變量____,它可以被該類所有的實例對象共享。

《Java程序設計》練習題

6、在一個類中,除了可以定義屬性、方法,還可以定義類,這樣的類被稱為__內部類___。

7、在Java語言中,允許使用已存在的類作為基礎創建新的類,這種技術稱為___繼承__。

8、一個類如果實現一個接口,那么它就需要實現接口中定義的全部_方法_,否則該類就必須定義成____抽象類__。

9、在程序開發中,要想將一個包中的類導入到當前程序中,可以使用_import_關鍵字。

10、一個類可以從其他的類派生出來,派生出來的類稱為__子類__,用于派生的類稱為__父類__或者_基類__。

三、判斷題

1、在定義一個類的時候,如果類的成員被private所修飾,該成員不能在類的外部被直接訪問。

2、Java中的每個類都至少有一個構造方法,一個類中如果沒有定義構造方法,系統會自動為這個類創建一個默認的構造方法。

3、聲明構造方法時,不能使用private關鍵字修飾。

4、類中static修飾的變量或方法,可以使用類名或對象的引用變量訪問。

5、方法內部類中不能訪問外部類的成員變量。

四、簡答題

1、構造方法和普通的成員方法有什么區別?

2、抽象類和接口的區別是什么?

3、什么叫多態?

1.構造方法是類的一個特殊成員,它會在類實例化對象時被自動調用。而普通方法只有在使用的時候才會被調用。在定義構造方法時要求方法名與類名相同、在方法名的前面沒有返回值類型的聲明、在方法中不能使用return語句返回一個值。

2.在Java中,使用abstract關鍵字修飾的類稱之為抽象類。抽象類是不能被實例化的,通常需要寫一個子類來繼承抽象類,同時實例化子類來獲得該類的對象。抽象類通常用于表示一種抽象的概念。

接口可以說是一種特殊的抽象類,接口中只能定義常量和抽象方法。由于接口的特殊性,在定義時需要使用interface關鍵字。

3.多態意味著一個對象有著多種形態,可以在特定的情況下,表現不同的狀態,從而對應著不同的屬性和方法。簡單的說,多態就是使用父類類型的變量引用子類對象,根據被引用子類對象的特性,程序會得到不同的運行效果。

《Java程序設計》練習題

第三章 多線程

一、選擇題

1、Thread類位于下列哪個包中?【

A.java.io B.java.lang C.java.util D.java.awt

2、線程調用sleep()方法后,該線程將進入以下哪種狀態?【

】 A.就緒狀態 B.運行狀態 C.阻塞狀態 D.死亡狀態

3、在以下哪種情況下,線程進入就緒狀態?【

】。A.線程調用了sleep()方法時 B.線程調用了join()方法 C.線程調用了yield()方法時 D.線程調用了notify()方法

4、對于通過實現Runnable接口創建線程,下面說法不正確的是【

】。A、適合多個相同程序代碼的線程去處理同一個資源的情況

B、把線程同程序代碼、數據有效的分離,很好地體現了面向對象的設計思想 C、可以避免由于Java的單繼承帶來的局限性 D、編寫簡單,可以不通過Thread類直接創建線程

5、對于死鎖的描述,下面四種說法不正確的是【

】。A.當兩個線程互相等待對方釋放同步鎖時會發生死鎖 B.Java虛擬機沒有檢測和處理死鎖的措施 C.一旦出現死鎖,程序會發生異常

D.處于死鎖狀態的線程處于阻塞狀態,無法繼續運行

6、下面四個選項中,不是線程進入阻塞狀態的原因是【

】。A.線程試圖獲取某個對象的同步鎖,而該鎖被其他線程持有 B.線程調用了另一個線程的join()方法 C.線程調用了一個阻塞式的IO方法 D.線程調用了setDaemon(boolean b)方法

7、要創建一個線程類,可通過繼承【

】類。A、Object B、Thread C、Runnable D、Task

8、通過實現【

】接口,可創建一個線程類 A、Object B、Thread C、Runnable D、Task

9、通過重寫繼承的方法【

】,可實現線程要執行的邏輯操作。A.start()B.main()C.run()D.execute()

10、通過調用線程對象實例的【

】方法,可以啟動執行該線程。A.start()B.main()C.run()D.execute()

二、填空題

1、一個應用程序中有多條并發執行的線索,每條線索都被稱作一個__線程_,它

《Java程序設計》練習題

們會交替執行,彼此間可以進行__通信__。

2、在實現多線程的程序時有兩種方式,一是通過繼承__thread_類,二是通過實現__runnable___接口。

3、yield()方法只能讓相同優先級或者更高優先級、處于__就緒_狀態的線程獲得運行的機會。

4、在Java語言中,同步方法需要用到關鍵字__synchronized___,對于同步方法而言無須指定同步鎖,它的同步鎖是方法所在的_對象__,也就是_this__(關鍵字)。

5、在Thread類中,start()方法用于開啟一個_新線程___,當線程啟動后,系統會自動調用___run()__方法。

三、判斷題

1、當創建一個線程對象時,該對象表示的線程就立即開始運行。

2、如果前臺線程全部死亡,后臺線程也會自動死亡。

3、同步代碼塊中的鎖對象可以是任意類型的對象。

4、靜態方法不能使用synchronized關鍵字來修飾。

5、線程結束等待或者阻塞狀態后,會進入運行狀態。

四、簡答題

1、在Java中創建線程有幾種方式?

2、sleep()和wait()有什么區別?

五、分析題

1、閱讀下面的程序,分析代碼是否能編譯通過,如果能編譯通過,請列出運行的結果。如果不能編譯通過,請說明原因。class RunHandler{

} public class Test{

} public static void main(String[] args){

} Thread t=new Thread(new RunHandler());t.start();public void run(){ } System.out.println(“run”);

《Java程序設計》練習題

2、閱讀下面的程序,分析代碼是否能編譯通過,如果能編譯通過,請列出運行的結果。如果不能編譯通過,請說明原因。public class A extends Thread{

}

3、閱讀下面的程序,分析代碼是否能編譯通過,如果能編譯通過,請列出運行的結果。如果不能編譯通過,請說明原因。public class Test{

}

六、設計題

1、聲明線程類TalkThread,循環打印線程名稱10次(表示10次發言機會);創建測試類,創建3個對象(表示3個發言人)并啟動線程,觀察輸出結果(3個發言人的發言順序)。

第四章 Java API

一、選擇題 private Object obj=new Object();public synchronized void a(){

} public static void main(String[] args){ } new Test().a();try{

} obj.wait();System.out.println(“waiting”);System.out.println(“Exception”);protected void run(){ } public static void main(String[] args){

} A a=new A();a.start();System.out.println(“this is run()”);}catch(InterruptedException e){

《Java程序設計》練習題

1、先閱讀下面的程序片段 String str=“abccdefcdh” String[] arr=str.split(“c”);System.out.println(arr.length);程序執行后,打印的結果是幾?【

】 A.2 B.3 C.4 D.5

2、以下都是Math類的常用方法,其中用于計算絕對值的方法是哪個【

】。A.ciel()B.floor()C.abs()D.random()

3、Random對象能夠生成以下哪種類型的隨機數?【

】。A.int B.String C.double D.A和C

4、String s=“abcdedcba”;則s.subString(3,4)返回的字符串是以下選項中的哪個?【

】。

A、cd B、de C、d D、e

5、假如indexOf()方法未能找到所指定的子字符串,則返回以下選項中的哪個?【

】。

A.false B.0 C.-1 D.以上答案都不對

6、以下Math類的方法中,-4.4通過哪個方法運算后,結果為-5.0【

】。A.round()B.min()C.floor()D.ceil()

7、已知int i=(int)(Math.random()*100),則i不可能為【

】。A.0 B.1 C.99 D.100

8、已知String str=“abc計算機123”,則str.length()的值為【

】。A.9 B.10 C.12 D.18

9、已知String a=“Hello”,String b=a.subString(0,2),則b=【

】。A.Hello B.He C.Hel D.null

10、下列方法中,【

】不是StringBuffer類的成員方法 A.compareTo()B.indexOf C.append D.charAt()

二、填空題

1、在Java中定義了兩個類來封裝對字符串的操作,它們分別是___________和_________________。

2、Java中操作日期的類有____________、_____________、_______________。

3、Math類中用于計算所傳遞參數平方根的方法是_______________。

4、Java中專門用于將日期格式化為字符串的類是________________。

5、Java中用于產生隨機數的類是_____________,它位于_____________包中。

6、String類中用于返回字符串字符個數的方法是________________。

《Java程序設計》練習題

三、判斷題

1、String對象和StringBuffer對象都是字符串變量,創建后都可以修改。

2、用運算符==比較字符串對象時,如果兩個字符串的值相同,結果為true。

3、Ssytem類中的currentTimeMillis()方法返回一個long類型的值。

4、Date、Calendar以及DateFormat類都位于java.util包中。

5、String類的方法replace(CharSequence str1, CharSequence str2)返回一個新的字符串,它是通過用str2替換此字符串中出現的所有str1得到的。

四、簡答題

1、String和StringBuffer有什么區別?

2、Date和Calendar類有什么區別和聯系?

第五章 集合類

一、選擇題

1、Java語言中,集合類都位于哪個包中?【 】

A.java.util B.java.lang C.java.array D.java.collections

2、使用Iterator時,判斷是否存在下一個元素可以使用以下哪個方法?【 】 A.next()B.hash()C.hasPrevious D.hasNext()

3、在程序開發中,經常會使用以下哪個類來存儲程序中所需的配置?【 】 A.HashMap B.TreeSet C.Properties D.TreeMap

4、要想集合中保存的元素沒有重復并且按照一定的順序排列,可以使用以下哪個集合?【 】

A.LinkedList B.ArrayList C.HashSet D.TreeSet

5、以下哪個方法不是LinkedList集合中定義的?【 】

A.getLast()B.getFirst()C.remove(int index)D.next()

6、獲取單列集合中元素的個數可以使用以下哪個方法?

A.length()B.size()C.get(int index)D.add(Object obj)

7、下列集合類型中,不允許集合中存在重復項的是【 】 A.Collection B.List C.Set D.Queue

8、下列關于List接口的說法,錯誤的是【 】 A.繼承Collection接口 B.不允許重復項 C.支持遍歷 D.可以使用訪問索引

9、下列關于Set接口的說法,錯誤的是【 】 A.繼承Collection接口 B.不允許重復項 C.支持遍歷 D.可以使用訪問索引

《Java程序設計》練習題

10、下列關于Collections類的靜態方法binarySerach()的說法,錯誤的是【 】

A.使用二分搜索法搜索指定列表 B.如果沒有找到,則返回負值 C.查找前列表必須先排序

D.如果有多個相同元素,則返回第一個的索引

二、填空題

1、JDK中提供了一系列可以存儲任意對象的類,統稱為____________

2、在創建TreeSet對象時,可以傳入自定義的比較器,自定義比較器需要實現_______________接口。

3、使用Iterator遍歷集合時,首先需要調用______________方法判斷是否存在下一個元素,若存在下一個元素,則調用_____________方法取出該元素。

4、使用Iterator遍歷集合時,首先需要調用______________方法判斷是否存在下一個元素,若存在下一個元素,則調用_____________方法取出該元素。

5、集合按照存儲結構的不同可分為單列集合和雙列集合,單列集合的根接口是________________,雙列集合的根接口是___________。

6、Map集合中的元素都是成對出現的,并且都是以__________、_________的映射關系存在。

7、Iterator有一個子類,不僅可以對集合進行從前向右遍歷,還可以從后向前遍歷,該類是______________。

8、List集合的主要實現類有__________、__________,Set集合的主要實現類有__________、__________,Map集合的主要實現類有__________、_________。

9、Map集合中存在元素需要調用____________方法,要想根據該集合的鍵獲取對應的值需要調用___________方法。

10、java.util包中提供了一個專門用來操作集合的工具類,這個類是________,還提供了一個專門用于操作數組的工具類,這個類是____________。

三、判斷題

1.Set集合是通過鍵值對的方式來存儲對象的。

2.集合中不能存放基本數據類型,而只能存放引用數據類型。

3.如果創建的TreeSet集合中沒有傳入比較器,則該集合中存入的元素需要實現Comparable接口。

4.使用Iterator迭代集合元素時,可以調用集合對象的方法增刪元素。5.LinkedList在內部維護了一個雙向循環鏈表,每一個元素節點都包含前一個元素節點和后一個元素節點的引用。

《Java程序設計》練習題

四、簡答題

1、集合中的List、Set、Map有什么區別?

2、請說說Collection和Collections有什么區別?

五、分析題

1、分析下面的程序,然后寫出程序的運行結果: import java.util.*;public class Exp0719 {

}

2、分析下面的程序,然后寫出程序的運行結果: import java.util.*;public class Exp0720 {

public static void main(String[] args){

TreeMap tm = new TreeMap();tm.put(“1”, “Jack”);tm.put(“2”, “Rose”);tm.put(“3”, “Lucy”);Set keySet = tm.keySet();Iterator it = keySet.iterator();while(it.hasNext()){ Object key = it.next();Object value = tm.get(key);public static void main(String[] args){

} Map map = new LinkedHashMap();map.put(“1”, “Jack”);map.put(“2”, “Rose”);map.put(“3”, “Lucy”);Set keySet = map.keySet();Iterator it = keySet.iterator();while(it.hasNext()){

} Object key = it.next();Object value = map.get(key);System.out.println(key + “:” + value);

《Java程序設計》練習題

}

} } System.out.println(key + “:” + value);

六、設計題

1、已知學生類s6_Stud4,成員變量有no(學號,int)、name(姓名,String)、chinese(語文成績,int)和math(數學成績,int)。編程,要求按總成績降序排列,若總成績相同,按語文成績降序排列,并編制簡單的測試類。

第六章 Java IO(輸入輸出)

一、選擇題

1、以下選項中,哪個是FileOutputStream的父類【

A.File B.FileOutput C.OutputStream D.InputStream

2、File類中以字符串形式返回文件絕對路徑的方法是 【

】 A.getParent()B.getName()C.getAbsolutePath()D.getPath()

3、以下哪個不是InputStream類的方法?【

】 A.int read(byte[])B.void flush()C.DataOutputStream D.available

4、以下選項中,哪個流中使用了緩沖區技術?【

】 A.BufferedOutputStream B.FileInputStream C.DataOutputStream D.FileReader

5、以下選項中,哪個是File類delete()方法返回值的類型?【

】 A.boolean B.int C.String D.Integer

6、以下選項中,哪個文件操作類可以實現一次讀入多個文件?【

】。A、FileReader

B、BufferedReader C、FileInputStream

D、SequenceInputStream

7、以下對File類的public boolean isFile()方法的描述,哪個是正確的【

】。A、判斷該File對象所對應的是否是文件 B、判斷該File對象所對應的是否是目錄 C、返回文件的最后修改時間 D、在當前目錄下生成指定的目錄

8、以下哪個包和Java.nio包共同提供了用于輸入/輸出流和文件操作的各種類型【

】。

《Java程序設計》練習題

A、java.lang

B、java.util C、java.io

D、java.text

9、BufferedReader的父類是【

】。

A、Reader

B、FileReader

C、PipedReader

D、InputStreamReader

10、要確定磁盤分區的容量和可用空閑空間等信息,可以使用的類是【

】。A、Drive B、Directory C、File D、FileOutputStream

二、填空題

1、Java中的IO流,按照傳輸數據不同,可分為____________和__________。

2、在Java中,__________類用于操作磁盤中的文件和目錄,位于___________包中。

3、在Java中,______________________類用來把兩個或更多的InputStream輸入流對象合并為單個InputStream輸入流對象使用。

4、Java中提供了一個類____________________,它不但具有讀寫文件的功能,并且可以隨機地從文件的任何位置開始執行讀寫數據的操作。

5、在Java中,能實現線程間通信的流是_____________。

6、InputStreamReader類是用于將____________流轉換為____________。

三、判斷題

1、如果一個File表示目錄下有文件或者子目錄,調用delete()方法也可以將其刪除。

2、裝飾設計模式中,裝飾對象應該包含一個被裝飾對象的引用。

3、使用ObjectInputStream與ObjectOutputStream類來讀取或存儲的對象必須要實現Serializable接口,否則程序將出現NotSerializableException異常。

4、InputStream類的close()方法是用于關閉流并且釋放流所占的系統資源。

5、一般來說,把字符轉換成計算機識別的字節序列稱為解碼,而把字節序列轉換為普通人能看懂的明文字符稱為編碼。

四、簡答題

1、Java流被分為字節流、字符流兩大流類,兩者有什么區別?

六、設計題

1、創建新的文本文件myFile.txt,從控制臺輸入內容并寫入源文件中,然后讀取并顯示myFile.txt內容。

2、在指定的文本文件中查找指定的關鍵字,并打印包含結果的行。文本文件和關鍵字均由命令行參數指定。

第七章 GUI(圖形用戶界面)

《Java程序設計》練習題

一、選擇題

1、下面四個組件中哪一個不是Component的子類?【

】 A.Button B.Dialog C.Label D.MenuBar

2、每個GUI程序中必須包含一個什么組件【

】 A.按鈕 B.標簽 C.菜單 D.容器

3、當鼠標按鍵被釋放時,會調用以下哪個事件處理器方法?【

】 A.mouseReleased()B.mouseUp()C.mouseOff D.mouseLetGo

4、ActionEvent的對象會被傳遞給以下哪個事件處理器方法?【

】 A.addChangeListener()B.addActionListener()C.stateChanged()D.actionPerformed()

5、下面哪個不是FlowLayout類中表示對齊方式的常量?【

】 A.FlowLayout.LEFT B.FlowLayout.CENTER C.FlowLayout.VERTICAL D.FlowLayout.RIGHT

6、下面對Swing的描述,不正確的是【

】。A、Swing是在AWT基礎上構建的一套新的圖形界面系統 B、Swing提供了AWT所能夠提供的所有功能 C、Swing組件是用Java代碼來實現的 D、Swing組件都是重量級組件

7、下面四對AWT和Swing對應組件中,錯誤的是【

】。A、Button和JButton B、Dialog和JDialog C、MenuBar和JMenuBar D、ComboBox和JComboBox

8、使用下面哪個組件可以接收用戶的輸入信息【

】。

A、JButton

B、JLabel C、JTextField

D、以上都可以

9、JFrame的默認布局管理器為【

】。

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

10、Japplet的默認布局管理器為【

】。

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

11、Jpanel的默認布局管理器為【

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

12、將組件垂直擺放在一列或水平擺放在一行中的布局管理器是【

】15

D、D、D、《Java程序設計》練習題

A、BorderLayout

B、FlowLayout

C、BoxLayout

D、GridLayout

13、下列事件中,不屬于低級事件【

】。

A.KeyEvent B.MouseEvent C.Windowevent D.ActionEvent

14、在類中若要處理ActionEvent事件,則該類需要實現的接口是【

】 A.Action B.Runnable C.Serializable D.ActionListener

15、下列關于事件的說法中,不正確的是【

】 A.一個組件可以引發多種事件 B.一個組件可以注冊多個事件監聽器 C.一個監聽器只能監聽一個組件 D.一個監聽器可以監聽處理多種事件

二、填空題

1、在Java中,圖形用戶界面簡稱__________,它的組件包含在___________和____________這兩個包中。

2、為了避免實現監聽器中定義的所有方法,造成代碼的臃腫,在JDK中提供了一些__________類,這些類實現了接口所有的方法,但是方法中沒有任何代碼,屬于一種空實現。

3、在Java中,____________類相當于一個抽象的畫筆對象,使用它可以在組件上繪制圖形。

4、_____________負責監聽事件源上發生的事件,并對各種事件做出響應處理。

5、在部分的Swing組件都是_____________類的直接或者間接子類,其名稱都是在原來AWT組件名稱前加上字母J。

三、判斷題

1、容器(Container)是一個可以包含基本組件和其他容器的組件。

2、可以通過實現ActionListener接口或者繼承ActionAdapter類來實現動作事件監聽器。

3、CardLayout布局管理器將界面看做一系列卡片,在任何時候只有其中一張卡片是可見的。

4、非模態對話框是指用戶需要等到處理完對話框后才能繼續與其他窗口進行交互。

5、JFrame的默認布局管理器是FlowLayout。

四、簡答題

1、簡述AWT和Swing的區別。

六、設計題

《Java程序設計》練習題

1、使用JLabel、JTextField、JButton控件實現攝氏溫度和華氏溫度的轉換。運行結果如圖所示:

(a)攝氏轉華氏

2、編程,在程序中建立一個窗口,其中包含兩個文本框和一個按鈕,單擊按鈕,能將一個文本框中的內容復制到另一個文本框中,程序運行結果如圖所示:

(b)華氏轉攝氏

第八章 網絡編程

一、選擇題

1、使用UDP協議通信時,需要使用哪個類把要發送的數據打包?【

】 A.Socket B.DatagramSocket C.DatagramPacket D.ServerSocket

2、以下哪個是serverSocket類用于接收來自客戶端請求的方法?【

】 A.accept()B.getOutputStream()C.receive()D.get()

3、以下說法不正確的是【

A.TCP連接中必須要明確客戶端與服務器端

B.TCP協議是面向連接的通信協議,它提供了兩臺計算機之間可靠無差錯的數據傳輸

C.UDP協議是面向無連接的協議,可以保證數據的完整性

D.UDP協議消耗資源小,通信效率高,通常被用于音頻、視頻和普通數據的傳輸

4、以下哪個類用于實現TCP通信的客戶端程序?【

】 A.ServerSocket B.Socket C.Client D.Server

《Java程序設計》練習題

5、進行UDP通信時,在接收端若要獲得發送端的IP地址,可以使用DatagramPacket的哪個方法?【

A.getAddress()B.getPort()C.getName()D.getData()

6、以下哪個方法是DatagramSocket類用于發送數據的方法?【

】 A.receive()B.accept()C.set()D.send()

7、在程序運行時,DatagramSocket的哪個方法會發生阻塞?【

】 A.send()B.receive()C.close()D.connect()

8、TCP協議的“三次握手”中,第一次握手指的是什么?【

】 A.客戶端再次向服務器端發送確認信息,確認連接

B.服務器端向客戶端回送一個響應,通知客戶端收到了連接請求 C.客戶端向服務器端發出連接請求,等待服務器確認 D.以上答案全部錯誤

9、TCP/IP系統中的端口號是一個多少位的數字?【

】 A.8 B.16 C.32 D.64

10、要獲取URL對象的端口號,可調用其成員方法是【

A.getHost()B.getProtocol()C.getPort()D.getRef()

二、填空題

1、TCP協議的特點是_______________,即在傳輸數據前先在___________和____________建立邏輯連接。

2、在計算機中,端口是用__________字節,也就是16位的二進制數表示,它的取值范圍是_________________。

3、TCP/IP協議被分為四個層:分別是__________、___________、_________、______________。

4、在JDK中,IP地址用________________類表示,該類提供了許多和IP地址相關的操作。

5、使用UDP協議開發網絡程序時,需要使用兩個類,分別是_______________、__________________。

6、URL一般由3部分組成:______________、主機地址和資源路徑。

7、Socket(套接字)由一個IP地址和____________唯一確定。

8、可以通過Socket對象的成員方法______________獲取其對應的輸入流。

9、可以通過Socket對象的成員方法______________獲取其對應的輸出流。

10、Java類庫java.net包中實現數據報套接字的類是_______________。

三、判斷題

1、由于UDP是面向連接的協議,可以保證數據的完整性,因此在傳輸重要數據

《Java程序設計》練習題

時建議使用UDP協議。

2、在網絡通信中,對數據傳輸格式、傳輸速率、傳輸步驟等作了統一規定,只有通信雙方共同遵守這個規定才能完成數據的交互,這種規定稱為網絡傳輸協議。

3、在創建發送端的DatagramPacket對象時,需要指定發送端的目標IP地址和端口號。

4、IPv4版本的IP地址使用4個字節來表示,IPv6版本的IP地址使用8個字節來表示。

5、使用TCP協議通信時,通信的兩端以IO的方式進行數據的交互。

四、簡答題

1、TCP協議和UDP協議有什么區別?

2、Socket類和ServerSocket類各有什么作用?

第九章 數據庫及其它

一、選擇題

1、下列數據庫產品中,哪個為適合于個人用戶的桌面DBMS【

】 A.Oracle B.Microsoft SQL Server C.IBM DB2 D.Microsoft Access

2、Microsoft SQL Server的數據庫模型屬于【

A.層次模型 B.網狀模型 C.關系模型 D.面向對象的數據模型

3、要刪除數據庫表,可以使用的SQL命令是【

A.DELETE TABLE B.REMOVE TABLE C.ERASE TABLE D.DROP TABLE

4、在Java編程語言中,JDBC是指【

A.Java類編譯程序 B.訪問關系數據庫的編程接口標準 C.Java類庫名稱 D.與瀏覽器交互的一種機制

二、填空題

1、每個數據表中通常都有一個____________,用于唯一確定一條記錄。

2、JDBC的相關類都位于_______________包中。

3、通常可以采用Class類的______________靜態方法顯示地加載一個驅動程序類。

4、使用DriverManager類的_______________靜態方法實現與URL所指定的數據源建立連接并返回一個Connection類的對象。

5、_______________________對象是對應于預編譯SQL語句的Statement。

6、ResultSet對象具有指向其當前數據行的游標,使用_____________方法可以

《Java程序設計》練習題

將游標移動到下一行。

三、判斷題

1、一個數據表中可以設定多個主關鍵字。

2、重復執行相同結構的SQL語句時,Statement比PreparedStatement具有更高的效率。

3、executeQuery()方法獲得的結果集ResultSet對象的游標默認指向第一行數據。

4、默認的ResultSet對象不可更新,僅有一個向前移動的光標。

第二篇:java程序設計簡明教程--上機練習題參考答案

《java程序設計簡明教程》上機練習題參考答案

目 錄

上機練習題1..................................................3 1.用循環語句分別打印九九乘法表......................................................................................................................3 2.定義兩個數組......................................................................................................................................................4 3.編寫一個簡單的考試程序..................................................................................................................................4 上機練習題2..................................................6 1.編寫程序,包括一個文本域和三個命令按鈕...................................................................................................6 2.編寫程序,包括一個文本框、一個密碼框和兩個按鈕...................................................................................7 3.編寫程序,建立一個帶有菜單的窗體..............................................................................................................8 4.編寫程序,將窗口尺寸設置為不可更改,并處理窗口事件...........................................................................9 5.編寫程序,用列表框列出一些選項,設置一個按鈕.....................................................................................10 6.編寫程序,用標簽顯示一道簡單測試題,答案使用單選按鈕列出.............................................................11 上機練習題3.................................................13 1.編寫Application在窗口內畫54個不同顏色的小圓......................................................................................13 2.編制Applet程序,使用Graphics類中的各種圖形繪制方法........................................................................14 3.編制Applet程序,以百葉窗效果顯示圖像....................................................................................................14 4.編制Applet程序,實現12個鋼琴鍵及其聲音的模擬..................................................................................17 上機練習題4.................................................18 1.假設在addressbook數據庫表中,存在多個姓氏相同的人,根據這一情況,建立相應的查詢功能.......18 2.編寫一個應用程序,使其可以從一個數據庫的某個表中查詢一個列的所有信息.....................................20 3.設計一個數據庫應用程序,功能是在學生數據庫的成績表中加入某門課程的所有學生的成績.............23 上機練習題5.................................................26 1.編寫GUI程序,制作一個文本文件閱讀器....................................................................................................26

Java程序設計簡明教程

2.編制程序,計算表達式“2*4*6+8*10*12+……+26*28*30”的值,并把結果輸出到文件中....................27 3.編制程序............................................................................................................................................................28 4.編寫程序,實現壓縮、解壓縮Zip文件.........................................................................................................29 5.編寫程序,從試題文件中抽取Java單選題進行測試練習............................................................................32 上機練習題6.................................................34 1.編制程序,求如下表達式的值........................................................................................................................34 2.用繼承Thread類的方法實現一個多線程程序...............................................................................................35 3.編制程序,同時顯示兩個時區的時鐘,并將時鐘的結果顯示在Fram窗體中...........................................37 4.使用異常處理機制和輸入/輸出處理機制編寫一個程序................................................................................41 上機練習題7.................................................42 1.編制Applet程序,使用Graphics類的常用方法,繪制一面五星紅旗........................................................42 2.編制Applet程序,實現一行文字的動畫顯示,即文字跑馬燈....................................................................42 3.編制Applet程序,實現圖片的水中倒影........................................................................................................44 4.結合圖形用戶界面與事件處理,創建一個日歷GUI程序............................................................................46 上機練習題8.................................................48 1.設計Java Applet程序,實現在圖片上飄雪花的特效....................................................................................48 2.設計一個通訊錄,保存讀者信息....................................................................................................................50 3.構造一個程序,它在一個窗口描繪出一個小鳥的圖標.................................................................................54

上機練習題參考答案

上機練習題1 1.用循環語句分別打印如圖1-24所示的九九乘法表。【參考程序】

//文件XiTi1_1_1_1.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_1{ public static void main(String args[]){ String str=“ ”;int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+“*”+j+“=”+i*j;if(ij)System.out.print(” “);else System.out.print(str.length()==5?str+” “:str+” “);} System.out.println(”“);} } }

//文件XiTi1_1_3.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_3{ public static void main(String args[]){ String str=” “;3

Java程序設計簡明教程

int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+”*“+j+”=“+i*j;System.out.print(str.length()==5?str+” “:str+” “);} System.out.println(”“);} } } 2.定義兩個數組,首先將第一個數組中的元素復制到第二個數組中,然后將第二個數數組進行從大到小的排序,最后將兩個數組中的對應元素進行比較,試統計兩個數組中對應位置上相同元素的個數。

【參考程序】

//文件XiTi1_2.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_2{ public static void main(String[] args){ int a[]={278,109,063,930,589,184,505,269,8,83};int b[]=new int[10];int t,cnt=0;for(int i=0;i<10;i++)b[i]=a[i];for(int i=1;i<10;i++)for(int j=0;j<10-i;j++)if(b[j]

System.out.println(”“);System.out.println(”********************* b **********************“);System.out.println(”“);for(int i=0;i<10;i++)System.out.print(b[i]+” “);System.out.println(”“);System.out.println(”“);System.out.println(”對應元素相同的個數為:“+cnt);System.out.println(”“);} } 3.編寫一個簡單的考試程序。【參考程序】

上機練習題參考答案

//文件XiTi1_3.java package XiTi;import java.io.*;import java.util.Date;public class XiTi1_3{ public static void main(String[] args){ String yes=”Y“,ok=”“;int x,x1,y,opr=2,s,h,m,t1,t2;String op,str=”“,re=”“,a=”A“;do{ x=new Long(Math.round(Math.random()*99+1)).intValue();y=new Long(Math.round(Math.random()*99+1)).intValue();opr=new Long(Math.round(Math.random()*3+1)).intValue();s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t1=h*3600+m*60+s;switch(opr){ case 1: str=x+”+“+y+”=?“;re=Integer.toString(x+y);break;case 2: str=x+”-“+y+”=?“;re=Integer.toString(x-y);break;case 3: str=x+”*“+y+”=?“;re=Integer.toString(x*y);break;case 4: x1=Math.max(x,y);y=Math.min(x,y);x=x1;x=x-x%y;str=x+”/“+y+”=?“;re=Integer.toString(x/y);break;} System.out.print(str);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();

}catch(IOException e){};s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t2=h*3600+m*60+s;if(ok.equals(re.trim()))System.out.println(”正確!用時:“+(t2-t1)+”秒“);else if(a.equals(ok.toUpperCase()))5

Java程序設計簡明教程

System.out.println(”答案:“+re+”,請多努力!“);else System.out.println(”錯誤!答案:“+re);System.out.print(”繼續嗎(Y/N)?“);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();

}catch(IOException e){};}while(yes.equals(ok.toUpperCase()));System.out.println(”“);} }

上機練習題2 1.編寫程序,包括一個文本域和三個命令按鈕,按鈕標題分別為紅色、黃色和藍色,單擊相應的按鈕,將文本域的前景色設置為紅色、黃色和藍色。

【參考程序】

import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.awt.*;public class xiti2_1 extends JFrame implements ActionListener{ JButton red,yellow,blue;JTextArea ta=new JTextArea(5,20);xiti2_1(){ red=new JButton(”紅色“);yellow=new JButton(”黃色“);blue=new JButton(”藍色“);red.addActionListener(this);yellow.addActionListener(this);blue.addActionListener(this);JPanel jp=new JPanel();jp.setLayout(new FlowLayout(FlowLayout.CENTER));jp.add(red);jp.add(yellow);jp.add(blue);Container con=getContentPane();con.add(ta,BorderLayout.CENTER);con.add(jp,BorderLayout.SOUTH);setSize(300,200);setTitle(”上機練習題2_1“);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();} public void actionPerformed(ActionEvent e){ JButton btn=(JButton)e.getSource();if(btn==red){ ta.setForeground(Color.red);

上機練習題參考答案

} if(btn==yellow){ ta.setForeground(Color.yellow);} if(btn==blue){ ta.setForeground(Color.blue);} } public static void main(String args[]){ new xiti2_1();} } 2.編寫程序,包括一個文本框、一個密碼框和兩個按鈕。按鈕標題分別為確定和取消,用戶在密碼框中輸入密碼,單擊確定按鈕,將在密碼框中輸入的字符顯示在文本框中。

【參考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class xiti2_2 extends JFrame implements ActionListener{ JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();JPanel p5=new JPanel();JTextField text=new JTextField(15);JPasswordField password=new JPasswordField(15);JButton ok=new JButton(”確定“);JButton cancel=new JButton(”取消“);xiti2_2(){ Container con=getContentPane();con.setLayout(new GridLayout(5,1));p2.add(new JLabel(”密碼:“));p2.add(password);p3.add(new JLabel(”文本:“));p3.add(text);p4.add(ok);p4.add(cancel);ok.addActionListener(this);cancel.addActionListener(this);con.add(p1);con.add(p2);con.add(p3);con.add(p4);con.add(p5);setSize(300,200);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”上機練習題2_2“);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==ok){ text.setText(password.getText());7

Java程序設計簡明教程

} if(e.getSource()==cancel){ dispose();System.exit(0);} } public static void main(String args[]){ new xiti2_2();} } 3.編寫程序,建立一個帶有菜單的窗體。當用戶選擇“Color”或“Style”菜單的相關選項時,標簽中文字的字體和顏色會發生相應的變化。

【參考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;class xiti2_3 extends JFrame implements ActionListener{ JMenuBar menubar=new JMenuBar();JTextArea ta=new JTextArea(”Hello Java!“);xiti2_3(){ setJMenuBar(menubar);JMenu menu,submenu;JMenuItem menuItem;menu=new JMenu(”Color“);menu.setMnemonic(KeyEvent.VK_C);menubar.add(menu);menuItem=new JMenuItem(”Yellow“);menuItem.setMnemonic(KeyEvent.VK_Y);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Orange“);menuItem.setMnemonic(KeyEvent.VK_O);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Pink“,KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Blue“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Style“);menu.setMnemonic(KeyEvent.VK_S);menubar.add(menu);menuItem=new JMenuItem(”Plain“);menuItem.setMnemonic(KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Bold“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);8

上機練習題參考答案

menu.add(menuItem);menuItem=new JMenuItem(”Italic“);menuItem.setMnemonic(KeyEvent.VK_I);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Exit“);menu.setMnemonic(KeyEvent.VK_E);menubar.add(menu);menuItem=new JMenuItem(”Close Window“);menuItem.setMnemonic(KeyEvent.VK_W);menuItem.addActionListener(this);menu.add(menuItem);Container cp=getContentPane();cp.add(ta,BorderLayout.SOUTH);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”菜單演示“);setSize(300,200);setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”Yellow“)ta.setForeground(Color.yellow);if(e.getActionCommand()==”Orange“)ta.setForeground(Color.orange);if(e.getActionCommand()==”Pink“)ta.setForeground(Color.pink);if(e.getActionCommand()==”Blue“)ta.setForeground(Color.blue);if(e.getActionCommand()==”Plain“)ta.setFont(new Font(”Dialog“,Font.PLAIN,24));if(e.getActionCommand()==”Bold“)ta.setFont(new Font(”Dialog“,Font.BOLD,24));if(e.getActionCommand()==”Italic“)ta.setFont(new Font(”Dialog“,Font.ITALIC,24));if(e.getActionCommand()==”Close Window“)System.exit(0);} public static void main(String args[]){ xiti2_3 menuexmple=new xiti2_3();} } 4.編寫程序,將窗口尺寸設置為不可更改,并處理窗口事件,使得點擊窗口關閉按鈕時,會彈出對話框,提示用戶是否確定要關閉窗口。

【參考程序】

import java.awt.event.*;import javax.swing.*;class MyFrame extends JFrame{ private JLabel label;public MyFrame(){ setTitle(”我的窗口“);label=new JLabel(”請點擊關閉按鈕!“,JLabel.CENTER);getContentPane().add(label);9

Java程序設計簡明教程

//為窗口添加關閉事件

addWindowListener(new WindowCloseListener(this));//將點擊窗口關閉按鈕默認的關閉窗口功能去掉

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//設置窗口大小不可更改 setResizable(false);setSize(300,200);setVisible(true);} class WindowCloseListener extends WindowAdapter{ JFrame f;public WindowCloseListener(JFrame frame){ f=frame;//f是對話框的父窗口 } public void windowClosing(WindowEvent e){ int i=JOptionPane.showConfirmDialog(f,”確定要關“,”“,JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);if(i==JOptionPane.OK_OPTION){ System.exit(0);//點擊確定退出程序 } } } public static void main(String[] args){ JFrame frame=new MyFrame();} }

閉窗口嗎?5.編寫程序,用列表框列出一些選項,設置一個按鈕,點擊按鈕就會將所選的選項添加到另一個列表框中,其中第二個列表框中顯示的已選項目可以刪除。程序運行界面如圖2-16所示。

【參考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;class MyList extends JFrame { JPanel panel;JButton add,remove;DefaultListModel listModel1,listModel2;JList list1,list2;String[] s={”計算機科學與技術“,”計算機通信“,”應用電子“,”電子商務“,”會計電算化“,”法律“,”工商管理“,”生物技術“,”建筑工程技術“,”工業設計“,”商務英語“,”統計“};ArrayList array1,array2;public MyList(){ setTitle(”列表框“);add=new JButton(”>>“);add.addActionListener(new AddActionListener());//為按鈕注冊監聽器 remove=new JButton(”<<“);remove.addActionListener(new RemoveActionListener());//為按鈕注冊監聽器

listModel1=new DefaultListModel();//為列表1創建一個列表框模型 listModel2=new DefaultListModel();//為列表2創建一個列表框模型 for(int i=0;i

上機練習題參考答案

list1=new JList(listModel1);//通過列表框模型1創建列表框1 list2=new JList(listModel2);//通過列表框模型2創建列表框2 panel=new JPanel();panel.setLayout(new GridLayout(2,1));//面板用來放置按鈕 panel.add(add);panel.add(remove);Container c=getContentPane();c.setLayout(new FlowLayout(FlowLayout.LEFT));c.add(list1);c.add(panel);c.add(list2);setSize(280,280);setVisible(true);} class AddActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list1.getSelectedIndex();//得到列表框1中被選中的項 if(id>=0){ listModel2.addElement(listModel1.get(id));//向列表框2中添加所選項 listModel1.remove(id);//將列表框1中所選項刪除 } } } class RemoveActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list2.getSelectedIndex();//得到列表框2中被選中的項 if(id>=0){ listModel1.addElement(listModel2.get(id));//向列表框1中添加所選項 listModel2.remove(id);//將列表框2中所選項刪除 } } } public static void main(String args[]){ new MyList();} } 6.編寫程序,用標簽顯示一道簡單測試題,答案使用單選按鈕列出,用戶選擇答案后,會彈出對話框顯示結果或說明。

【參考程序】

import javax.swing.*;import java.awt.*;import java.awt.event.*;class Question{ public JFrame frame;public JPanel panel;static JLabel label;public JRadioButton b1,b2,b3;static String question=”如果你意外地拿到一千元獎金,想去買一件很需要的大衣,但是錢不夠;如果去買一雙不急需要的運動鞋,則又多了數百元,你會怎么做?“;static String xx1=”自已添些錢把大衣買回來。“;11

Java程序設計簡明教程

static String xx2=”買運動鞋再去買些其它的小東西。“;static String xx3=”什么都不買先存起來。“;static String dd1=”你的決斷力不錯,雖然有時也會三心二意、猶豫徘徊,可總是在重要關頭作出決定,你最大的特色是作了決定不再反悔。“;static String dd2=”你是拿不定主意的人,做事沒主見,處處要求別人給你意見,很少自已做判斷,因為個性上你有些自卑,不肯定自己。“;static String dd3=”你是判斷力超級強的人,不客氣地說,你甚至有點莽撞,就是因為你沖動率直的個性,反而考慮不夠周詳,你常常后悔自己匆匆作決定,忽略了其它事情。“;public JOptionPane optionPane;public Question(){ //構造方法,完成布局 frame=new JFrame(”心理測試“);panel=new JPanel();panel.setLayout(new GridLayout(3,1));label=new JLabel(question,JLabel.CENTER);b1=new JRadioButton(xx1);b2=new JRadioButton(xx2);b3=new JRadioButton(xx3);ButtonGroup group=new ButtonGroup();group.add(b1);group.add(b2);group.add(b3);RadioListener myListener=new RadioListener();b1.addActionListener(myListener);b2.addActionListener(myListener);b3.addActionListener(myListener);Container c=frame.getContentPane();c.add(label,BorderLayout.NORTH);c.add(panel,BorderLayout.CENTER);panel.add(b1);panel.add(b2);panel.add(b3);frame.pack();frame.setVisible(true);} class RadioListener implements ActionListener{ public void actionPerformed(ActionEvent e){ //事件處理,點擊選項彈出相應的對話框 JRadioButton rb=(JRadioButton)e.getSource();if(rb==b1){ JOptionPane.showMessageDialog(frame,dd1,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b2){ JOptionPane.showMessageDialog(frame,dd2,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b3){ JOptionPane.showMessageDialog(frame,dd3,”“,JOptionPane.DEFAULT_OPTION);} } } public static void main(String[] args){ new Question();} } 12

上機練習題參考答案

上機練習題3 1.編寫Application在窗口內畫54個不同顏色的小圓,每當窗口顯示在顯示器上、從隱藏變成顯示、從縮小圖標還原、改變窗口的大小時,小圓所呈現的顏色也可以發生變化。(提示:使用隨機數產生隨機顏色)。程序以不同顏色的小圓鋪滿窗口。如果在窗口內只顯示某個特定的部分,其他部分則不顯示時。

【參考程序】

//文件RandomColorDemo.java import java.awt.*;import javax.swing.*;class RandomColorDemo extends JFrame{ static RandomColorDemo frm=new RandomColorDemo();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 紅色的隨機數 int green=(int)(Math.random()*255);// 綠色的隨機數 int blue=(int)(Math.random()*255);// 藍色的隨機數 g.setColor(new Color(red,green,blue));// 設置顏色

g.fillOval(x,y,15,15);// 用指定的顏色填滿小圓 } } }

//文件RandomColor.java import java.awt.*;import javax.swing.*;class RandomColor extends JFrame{ static RandomColor frm=new RandomColor();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ g.setClip(35,37,125,100);//g.clipRect(35,37,125,100);for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 紅色的隨機數 int green=(int)(Math.random()*255);// 綠色的隨機數 int blue=(int)(Math.random()*255);// 藍色的隨機數 g.setColor(new Color(red,green,blue));// 設置顏色

g.fillOval(x,y,15,15);// 用指定的顏色填滿小圓 } //g.clearRect(35,37,125,100);

Java程序設計簡明教程

} } 2.編制Applet程序,使用Graphics類中的各種圖形繪制方法,繪制一個可愛的熊寶寶(或其他自己愛好的小動物,例如,小豬,小兔等)。在小應用程序瀏覽器中查看程序的執行結果。

【參考程序】

import java.applet.*;import java.awt.*;import java.awt.Graphics;public class Bear extends Applet{ public void paint(Graphics g){ g.drawOval(100,40,180,180);//face g.fillOval(120,90,40,35);//left eye g.fillOval(220,90,40,35);//right eye g.fillOval(180,140,25,25);//nose g.setColor(Color.red);g.fillArc(166,170,50,30,180,180);//mouse g.fillArc(85,25,80,80,25,223);//left ear g.fillArc(215,25,80,80,-57,213);//right ear g.drawLine(156,210,96,320);//body g.drawLine(96,320,126,410);g.drawLine(236,210,296,320);g.drawLine(296,320,256,410);g.drawLine(126,410,256,410);g.fillOval(80,240,50,50);//arm g.fillOval(260,240,50,50);g.fillOval(100,390,50,50);//leg g.fillOval(230,390,50,50);} } 3.編制Applet程序,以百葉窗效果顯示圖像。【參考程序】

//文件Efficient.java import java.awt.*;import java.applet.*;import java.io.*;import java.awt.image.*;public class Efficient extends Applet implements Runnable{ private Image img[],showImage;private MediaTracker imageTracker;private int ImageW,ImageH,totalImage=5,currentImage,nextImage;private Thread thread;private int delay;private int totalPix,pix1[],pix2[],pix3[],pix4[],pix5[],pixA[],pixB[];public void init(){ this.setBackground(Color.black);img=new Image[totalImage];imageTracker=new MediaTracker(this);String s=new String(”“);for(int i=0;i

上機練習題參考答案

imageTracker.addImage(img[i],0);} try{ imageTracker.waitForID(0);}catch(InterruptedException e){} if(getParameter(”delay“)==null){ delay=3000;} else{ delay=Integer.parseInt(getParameter(”delay“));} ImageW=img[0].getWidth(this);ImageH=img[0].getHeight(this);totalPix=ImageW*ImageH;pix1=new int[totalPix];PixelGrabber PG1=new PixelGrabber(img[0],0,0,ImageW,ImageH,pix1,0,ImageW);try{ PG1.grabPixels();}catch(InterruptedException ex){} pix2=new int[totalPix];PixelGrabber PG2=new PixelGrabber(img[1],0,0,ImageW,ImageH,pix2,0,ImageW);try{ PG2.grabPixels();}catch(InterruptedException ex){} pix3=new int[totalPix];PixelGrabber PG3=new PixelGrabber(img[2],0,0,ImageW,ImageH,pix3,0,ImageW);try{ PG3.grabPixels();}catch(InterruptedException ex){} pix4=new int[totalPix];PixelGrabber PG4=new PixelGrabber(img[3],0,0,ImageW,ImageH,pix4,0,ImageW);try{ PG4.grabPixels();}catch(InterruptedException ex){} pix5=new int[totalPix];PixelGrabber PG5=new PixelGrabber(img[4],0,0,ImageW,ImageH,pix5,0,ImageW);try{ PG5.grabPixels();}catch(InterruptedException ex){} currentImage=0;pixA=new int[totalPix];pixB=new int[totalPix];showImage=img[0];thread=new Thread(this);thread.start();} public void paint(Graphics g){ g.drawImage(showImage,0,0,this);} public void update(Graphics g){ paint(g);} public void run(){ 15

Java程序設計簡明教程

if(thread==null){ thread=new Thread(this);thread.start();} while(true){ try{ thread.sleep(delay);nextImage=((currentImage+1)%totalImage);if(currentImage==0){ System.arraycopy(pix1,0,pixA,0,totalPix);System.arraycopy(pix2,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==1){ System.arraycopy(pix2,0,pixA,0,totalPix);System.arraycopy(pix3,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==2){ System.arraycopy(pix3,0,pixA,0,totalPix);System.arraycopy(pix4,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==3){ System.arraycopy(pix4,0,pixA,0,totalPix);System.arraycopy(pix5,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==4){ System.arraycopy(pix5,0,pixA,0,totalPix);System.arraycopy(pix1,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} while(true){ for(int i=0;i<(int)(ImageH/10);i++){ try{ thread.sleep(100);for(int j=0;j

上機練習題參考答案

currentImage=nextImage;repaint();}catch(InterruptedException e){} } } } 4.編制Applet程序,實現12個鋼琴鍵及其聲音的模擬。【參考程序】

//文件Piano.java import java.awt.*;import java.applet.*;class Keyboard extends Canvas {//鋼琴鍵類

Color keyColor=Color.white;AudioClip key;int width,height;Keyboard(Color c, AudioClip k){//初始化鋼琴鍵的顏色及聲音 keyColor=c;setBackground(keyColor);key=k;width=this.getSize().width;height=this.getSize().height;} public boolean mouseDown(Event event, int x, int y){//鼠標按下事件 key.play();return true;} public void paint(Graphics g){//畫鋼琴鍵 width=this.getSize().width;height=this.getSize().height;g.setColor(Color.black);g.drawRect(0,0,width-1,height-1);} } public class Piano extends Applet{ private int height,width;private Keyboard key[];private AudioClip sound[];public void init(){ this.setLayout(null);width=this.size().width;height=this.size().height;key=new Keyboard[12];sound=new AudioClip[12];String s=new String(”“);for(int i=0;i<12;i++){ s=i + ”.au“;sound[i]=getAudioClip(getCodeBase(),s);} key[0]=new Keyboard(Color.white,sound[0]);key[1]=new Keyboard(Color.black,sound[1]);key[2]=new Keyboard(Color.white,sound[2]);key[3]=new Keyboard(Color.black,sound[3]);17

Java程序設計簡明教程

key[4]=new Keyboard(Color.white,sound[4]);key[5]=new Keyboard(Color.white,sound[5]);key[6]=new Keyboard(Color.black,sound[6]);key[7]=new Keyboard(Color.white,sound[7]);key[8]=new Keyboard(Color.black,sound[8]);key[9]=new Keyboard(Color.white,sound[9]);key[10]=new Keyboard(Color.black,sound[10]);key[11]=new Keyboard(Color.white,sound[11]);key[1].setBounds(30,0,20,60);add(key[1]);key[3].setBounds(70,0,20,60);add(key[3]);key[6].setBounds(150,0,20,60);add(key[6]);key[8].setBounds(190,0,20,60);add(key[8]);key[10].setBounds(230,0,20,60);add(key[10]);key[0].setBounds(0,0,40,110);key[2].setBounds(40,0,40,110);key[4].setBounds(80,0,40,110);key[5].setBounds(120,0,40,110);key[7].setBounds(160,0,40,110);key[9].setBounds(200,0,40,110);key[11].setBounds(240,0,40,110);add(key[0]);add(key[2]);add(key[4]);add(key[5]);add(key[7]);add(key[9]);add(key[11]);} }

上機練習題4 1.假設在addressbook數據庫表中,存在多個姓氏相同的人,根據這一情況,建立相應的查詢功能,使用戶可以在ResultSet中滾動記錄。要求設計一個合適的圖形界面。

程序源代碼如下: 【參考程序】

//數據庫連接使用ConnectServer類 import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.table.*;public class ex4_1 extends JFrame implements ActionListener{ JTable table;TableModel model;

上機練習題參考答案

DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p3=new JPanel();JLabel bq1=new JLabel(”按姓氏或姓名查詢“);JTextField combSs=new JTextField(6);JButton btn1=new JButton(”確定“);String strs=null,xxno,xscore;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_1(){ String sql=”select * from address “;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);btn1.addActionListener(this);p3.add(bq1);p3.add(combSs);p3.add(btn1);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setTitle(”學生信息查詢“);setSize(600,400);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();while(rs.next()){ Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();} public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ strs=(String)combSs.getText();String sql=”select * from address where 姓名 LIKE '“+strs+”%'“;19

Java程序設計簡明教程

try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”學生信息“);table.setRowHeight(20);setSize(600,400);setVisible(true);} } public static void main(String args[]){ if(!ConnectServer.conn(”jdbc:odbc:xsgl“,”sa“,”“)){ JOptionPane.showMessageDialog(null,”數據庫連接不成功“);System.exit(0);} new ex4_1();} } 2.編寫一個應用程序,使其可以從一個數據庫的某個表中查詢一個列的所有信息。【參考程序】

import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import javax.swing.table.*;public class ex4_2 extends JFrame implements ActionListener{ JTable table;DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p2=new JPanel();JPanel p3=new JPanel();JButton b1=new JButton(”首頁“);JButton b2=new JButton(”上頁“);JButton b3=new JButton(”下頁“);JButton b4=new JButton(”尾頁“);JLabel bb=new JLabel(” “);JButton btn1=new JButton(”查詢“);JComboBox combSs=new JComboBox();int count=0;int pagesize=6;int pagecount=0;20

上機練習題參考答案

int page=1;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_2(){ String sql=”select * from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();pagecount=(int)count/pagesize+(count%pagesize==0?0:1);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++){ title.addElement(dbmd.getColumnName(i));combSs.addItem(dbmd.getColumnName(i));} dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);if(pagecount!=0)bb.setText(”第“+page+”頁“);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);btn1.addActionListener(this);p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4);p2.add(bb);p3.add(btn1);p3.add(combSs);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);this.getContentPane().add(p2,”South“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try{ rs.close();stmt.close();ConnectServer.con.close();System.exit(0);}catch(SQLException ee){ee.printStackTrace();} }});setTitle(”書目信息分頁瀏覽“);setSize(500,300);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();for(int i=1;i<1+pagesize*(page-1);i++)rs.next();int j=0;while(j

Java程序設計簡明教程

j++;Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();this.getContentPane();} public int getcount(){ int n=0;try{ if(rs.last()){ n=rs.getRow();rs.beforeFirst();return n;}else return 0;}catch(SQLException e){System.out.println(”有異常拋出“);return 0;} } public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ String strs=(String)combSs.getSelectedItem();String sql=”select no ,“+strs.trim()+” from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”書目信息按某一列查詢瀏覽“);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setSize(500,300);setVisible(true);} else if(e.getSource()==b1)page=1;else if(e.getSource()==b2){if(page>1)page=page-1;} else if(e.getSource()==b3){if(page

”+page+“頁”);} 22

上機練習題參考答案

public static void main(String args[]){ Font font=new Font(“JFrame”,Font.PLAIN,14);Enumeration keys=UIManager.getLookAndFeelDefaults().keys();while(keys.hasMoreElements()){ Object key=keys.nextElement();if(UIManager.get(key)instanceof Font)UIManager.put(key,font);} if(!ConnectServer.conn(“jdbc:odbc:libbook”,“sa”,“")){ JOptionPane.showMessageDialog(null,”數據庫連接不成功“);System.exit(0);} new ex4_2();} } 3.設計一個數據庫應用程序,功能是在學生數據庫的成績表中加入某門課程的所有學生的成績。【參考程序】

//數據庫為xsgl,表grade的結構為xno,xname,shx,yy,wl import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.JTable.*;import javax.swing.table.*;public class ex4_3 extends JFrame implements ActionListener{ JTable table;TableModel model;DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p2=new JPanel();JPanel p3=new JPanel();JButton b1=new JButton(”刷新“);JLabel bq1=new JLabel(”插入一列或某列成績“);JTextField combSs=new JTextField(6);JButton btn1=new JButton(”插入列“);String strs=null,xxno,xscore;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_3(){ String sql=”select * from grade“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);23

Java程序設計簡明教程

table=new JTable(dtm);initTable();model=table.getModel();model.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e){ int row=e.getFirstRow();int column=e.getColumn();Object data=model.getValueAt(row,column);try{ System.out.println(data);strs=combSs.getText();xscore=(String)data;xxno=(String)model.getValueAt(row,0);String sql=”update grade set “+strs+”=“+xscore+” where xno=“+xxno;stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);stmt.executeUpdate(sql);System.out.println(”xno=“+xxno);table.requestDefaultFocus();}catch(Exception ee){System.out.println(”有異常“+ee.getMessage());} }});table.setRowHeight(20);p1=new JScrollPane(table);b1.addActionListener(this);btn1.addActionListener(this);p2.add(b1);p3.add(bq1);p3.add(combSs);p3.add(btn1);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);this.getContentPane().add(p2,”South“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try{ rs.close();stmt.close();ConnectServer.con.close();System.exit(0);}catch(SQLException ee){ee.printStackTrace();} } });setTitle(”學生成績瀏覽“);setSize(600,400);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();while(rs.next()){ Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} 24

上機練習題參考答案

}catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();} public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ strs=(String)combSs.getText();String sql=”ALTER TABLE grade ADD “+strs.trim()+” int“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);stmt.executeUpdate(sql);stmt.close();sql=”select * from grade“;stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”學生成績信息“);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });setSize(600,400);} else if(e.getSource()==b1){ String sql=”select * from grade“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();setTitle(”學生成績瀏覽“);setSize(600,400);} } public static void main(String args[]){ Font font=new Font(”JFrame“,Font.PLAIN,14);Enumeration keys=UIManager.getLookAndFeelDefaults().keys();25

Java程序設計簡明教程

while(keys.hasMoreElements()){ Object key=keys.nextElement();if(UIManager.get(key)instanceof Font)UIManager.put(key,font);} if(!ConnectServer.conn(”jdbc:odbc:xsgl“,”sa“,”“)){ JOptionPane.showMessageDialog(null,”數據庫連接不成功“);System.exit(0);} new ex4_3();} }

上機練習題5 1.編寫GUI程序,制作一個文本文件閱讀器,文件菜單設置打開和退出命令,可以打開本地硬盤上文本文件,并將文件內容顯示到文本框中,文本框不能編輯,退出命令能夠退出程序。

【解題思路】

(1)界面設計:一個窗口,窗口中設置一個菜單條,菜單條上設置一個“文件”菜單,菜單中設置“打開”和“退出”菜單項,窗口中放置一個不可編輯的文本框并使其充滿窗口;

(2)界面實現:創建一個類繼承JFrame類,在構造方法中設置菜單條,添加文本框;

(3)功能設計:使兩個菜單項響應事件,點擊“打開”可將選中的文件內容顯示在文本框中,點擊“退出”可以退出程序;

(4)功能實現:在構造方法中為兩個菜單項注冊ActionListener監聽器,用本類實現監聽器接口,在實現的actionPerformed()方法中進行判斷,如果事件源是“打開”菜單項,則調出打開文件對話框,獲取選中的文件名,調用另一個顯示文件內容的方法,該方法負責將文件內容用輸入流讀取后顯示在文本框中,如果事件源是“退出”,則退出程序。

【參考程序】

//文件Reader.java import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Reader implements ActionListener{ private JFrame frame;private TextArea textArea;FileDialog fileDialog;public Reader(){//構造方法,完成布局 frame=new JFrame(”文本文件閱讀器“);MenuBar mb=new MenuBar();Menu m1=new Menu(”文件“);MenuItem mi1=new MenuItem(”打開“);mi1.setActionCommand(”打開“);mi1.addActionListener(this);MenuItem mi2=new MenuItem(”退出“);mi2.setActionCommand(”退出“);mi2.addActionListener(this);m1.add(mi1);m1.add(mi2);mb.add(m1);frame.setMenuBar(mb);26

上機練習題參考答案

textArea=new TextArea();Container c=frame.getContentPane();c.add(textArea);frame.setSize(500,600);frame.setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”打開“){ //若點擊“打開”,調出文件打開對話框,打開文件 fileDialog=new FileDialog(frame,”打開“,FileDialog.LOAD);fileDialog.setVisible(true);String path=fileDialog.getDirectory();String name=fileDialog.getFile();String file=path+name;openFile(file);} else{ //若點擊“退出”,退出程序 System.exit(1);} } public void openFile(String file){ //打開文件方法,讀取指定文件的內容,并顯示在文本域中 try{ FileReader fr=new FileReader(file);BufferedReader br=new BufferedReader(fr);String s=br.readLine();while(s!=null){ textArea.append(s+”n“);s=br.readLine();} frame.setTitle(file);}catch(FileNotFoundException e1){ System.out.println(”文件沒有找到!“);}catch(IOException e2){ System.out.println(e2.getMessage());} } public static void main(String[] args){ new Reader();} } 2.編制程序,計算表達式“2*4*6+8*10*12+??+26*28*30”的值,并把結果輸出到文件中。【參考程序】

//文件名xiti5_2.java import java.io.*;import java.awt.*;import java.applet.Applet;import java.awt.event.*;import javax.swing.*;public class xiti5_2 extends Applet implements ActionListener{ String Savepath;//用來指定文件的路徑。JButton Button1,Button2;JLabel Label1,Label2;int s,i;27

Java程序設計簡明教程

public void init(){ this.setSize(400,400);//設置了窗體顯示的大小

Label1=new JLabel(”計算表達式2*4*6+8*10*12+......+26*28*30的值“,JLabel.CENTER);add(Label1);Label2=new JLabel(” “,JLabel.CENTER);add(Label2);Button1=new JButton(” 計算 “);add(Button1);Button2=new JButton(” 保存 “);add(Button2);Button1.addActionListener(this);Button2.addActionListener(this);this.setSize(400,180);} public void actionPerformed(ActionEvent e){ if(e.getSource()==Button1){ s=0;for(i=2;i<30;){ s=s+i*(i+2)*(i+4);i=i+6;} Label2.setText(” 計算結果為:“+s+” “);} //下面的一段代碼是打開一個文本文件,并顯示在文本框中 if(e.getSource()==Button2){ try{ Label2.setText(” 將結果輸出到c:save.txt文件中“);Savepath=”c:save.txt“;//指定保存文件的路徑

PrintWriter out=new PrintWriter(new FileWriter(Savepath));out.print(”“+s);//將文本框中的內容寫入指定的文件中 out.close();//關閉文件流,釋放資源 }catch(Exception eee){} } } } 3.編制程序,其功能是:讀入一個順序文件,該文件每條記錄的三個數據項分別是職工姓名、基本工資和獎金,在讀入每條記錄后,將每個職工的基本工資增加百分之十后得到新的數據記錄。

【參考程序】

//文件名為:xiti5_3.java import java.io.*;import java.awt.*;import java.applet.Applet;import java.awt.event.*;public class xiti5_3 extends Applet implements ActionListener{ Button Button1,Button2;Label Label1,Label2;TextArea ta;String Openpath;double chenji[]=new double[5];public static int i=0;public static String str[]=new String[5];public void init(){ 28

上機練習題參考答案

Button1=new Button(”打開文件“);add(Button1);Button2=new Button(”增加工資“);add(Button2);ta=new TextArea();add(ta);Button1.addActionListener(this);Button2.addActionListener(this);this.setSize(400,200);} public void actionPerformed(ActionEvent e){ if(e.getSource()==Button2){ Openpath=”d:save.txt“;int j;ta.setText(”“);try{ BufferedReader in=new BufferedReader(new FileReader(Openpath));//建立一個BufferedReader流對象 while((Openpath=in.readLine())!=null){//把文件中的內容一行一行地讀出 str[i]=Openpath;i=i+1;} in.close();//關閉文件流,釋放資源 for(j=0;j<5;j++){ str[j].trim();} for(j=0;j<5;j++){ chenji[j]=Integer.valueOf(str[j].toString().substring(15)).intValue();} for(j=0;j<5;j++){ chenji[j]=chenji[j]*(1+0.1);ta.setText(ta.getText()+str[j]+” “+chenji[j]+”n“);} }catch(Exception ee){} } if(e.getSource()==Button1){ ta.setText(”“);Openpath=”d:save.txt“;try{ BufferedReader in=new BufferedReader(new FileReader(Openpath));//建立一個BufferedReader流對象。

while((Openpath=in.readLine())!=null){ //把文件中的內容一行一行地讀出 ta.setText(ta.getText()+Openpath+”n“);//將讀出的內容顯示在文本框中 } in.close();//關閉文件流,釋放資源

}catch(Exception ee){ java.lang.System.exit(-1);} } } } 4.編寫程序,實現壓縮、解壓縮Zip文件。【參考程序】

import java.awt.*;import java.awt.event.*;29

Java程序設計簡明教程

import java.io.*;import java.util.*;import java.util.zip.*;import javax.swing.*;public class xiti5_4 extends JFrame implements ActionListener{ JTextArea textarea;JTextField infotip;String doc;long doczipsize=0;public xiti5_4(){ JMenuBar menubar=new JMenuBar();setJMenuBar(menubar);JMenu file=new JMenu(”File“,true);menubar.add(file);JMenuItem neww=new JMenuItem(”New“);neww.addActionListener(this);file.add(neww);JMenuItem open=new JMenuItem(”Open“);open.addActionListener(this);file.add(open);JMenuItem save=new JMenuItem(”Save“);save.addActionListener(this);file.add(save);JMenuItem exit=new JMenuItem(”Exit“);file.add(exit);add(”Center“,textarea=new JTextArea());add(”South“,infotip=new JTextField());this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} private void openFile(){ FileDialog dlg=new FileDialog(this,”Open“,FileDialog.LOAD);dlg.setVisible(true);textarea.setText(”“);String filename=dlg.getDirectory()+dlg.getFile();try{ File f=new File(filename);if(!f.exists())return;ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));zipis.getNextEntry();DataInputStream dis=new DataInputStream(zipis);doc=dis.readUTF();dis.close();doczipsize=f.length();showTextandInfo();}catch(IOException ioe){ System.out.println(ioe);} } private void saveFile(){ 30

上機練習題參考答案

FileDialog dlg=new FileDialog(this,”Save“,FileDialog.SAVE);dlg.setVisible(true);String filename=dlg.getDirectory()+dlg.getFile();try{ if(!filename.endsWith(”.zip“)){ filename+=”.zip“;} File f=new File(filename);if(!f.exists())f.createNewFile();ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));zipos.setMethod(ZipOutputStream.DEFLATED);zipos.putNextEntry(new ZipEntry(”zip“));DataOutputStream os=new DataOutputStream(zipos);doc=textarea.getText();os.writeUTF(doc);os.close();doczipsize=f.length();showTextandInfo();}catch(IOException ioe){ System.out.println(ioe);} } private void showTextandInfo(){ textarea.replaceRange(doc,0,textarea.getText().length());infotip.setText(”uncompressed size:“+doc.length()+”compressed size:“+doczipsize);} public void actionPerformed(ActionEvent e){ String arg=e.getActionCommand();if(”New“.equals(arg)){ doc=”“;textarea.setText(”“);doczipsize=0;showTextandInfo();} else if(”Open“.equals(arg))openFile();else if(”Save“.equals(arg))saveFile();else if(”exit“.equals(arg)){ dispose();System.out.println(”無此命令“);} } public static void main(String args[]){ xiti5_4 ok=new xiti5_4();ok.setTitle(”zip sample“);ok.setSize(600,300);ok.setVisible(true);} } 31

Java程序設計簡明教程

5.編寫程序,從試題文件中抽取Java單選題進行測試練習。【參考程序】

import java.io.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.awt.*;import java.util.*;public class xiti5_5 extends JFrame implements ActionListener,ItemListener{ String str[]=new String[7],s;FileReader file;BufferedReader in;JButton restart=new JButton(”重新練習“);JButton next=new JButton(”下一題目“);JButton finish=new JButton(”交卷“);JCheckBox option[]=new JCheckBox[4];JTextField score=new JTextField(10);JTextField question=new JTextField(40);int account=0;xiti5_5(){ for(int i=0;i<4;i++){ option[i]=new JCheckBox();option[i].addItemListener(this);} restart.addActionListener(this);next.addActionListener(this);finish.addActionListener(this);try{ file=new FileReader(”D:java.txt“);in=new BufferedReader(file);}catch(IOException e){} Box boxV=Box.createVerticalBox();JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();p1.setLayout(new FlowLayout(FlowLayout.LEFT));p1.add(new JLabel(”題目“));p1.add(question);p2.setLayout(new FlowLayout(FlowLayout.LEFT));p2.add(new JLabel(”選擇答案“));for(int i=0;i<4;i++){ p2.add(option[i]);} p3.setLayout(new FlowLayout(FlowLayout.CENTER));p3.add(new JLabel(”您的得分:“));p3.add(score);p4.setLayout(new FlowLayout(FlowLayout.CENTER));p4.add(restart);p4.add(next);p4.add(finish);boxV.add(p1);boxV.add(p2);boxV.add(p3);boxV.add(p4);Container con=getContentPane();con.add(boxV);this.setSize(800,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);32

上機練習題參考答案

this.validate();reading();} public void reading(){ int i=0;try{ s=in.readLine().trim();if(!(s.startsWith(”end“))){ StringTokenizer tokenizer=new StringTokenizer(s,”#“);while(tokenizer.hasMoreTokens()){ str[i]=tokenizer.nextToken();i++;} question.setText(str[0]);for(int j=1;j<=4;j++){ option[j-1].setLabel(str[j]);} } else if(s.startsWith(”end“)){ question.setText(”考試結束,點擊交卷按鈕查看得分。“);next.setEnabled(false);in.close();file.close();} }catch(Exception exp){question.setText(”無試題文件“);} } public void actionPerformed(ActionEvent e){ if(e.getSource()==restart){ account=0;next.setEnabled(true);score.setText(account+”分“);try{ file=new FileReader(”D:java.txt“);in=new BufferedReader(file);}catch(IOException ee){} reading();} if(e.getSource()==next){ reading();for(int j=0;j<4;j++){ option[j].setEnabled(true);option[j].setSelected(false);} } if(e.getSource()==finish){ int n=JOptionPane.showConfirmDialog(null,”交卷以后將不能再修改,確實要交卷嗎?“, ”確認對話框“,JOptionPane.YES_NO_OPTION);if(n==JOptionPane.YES_OPTION){ for(int i=0;i<4;i++){ option[i].setEnabled(false);} score.setText(account*10+”分“);restart.setEnabled(false);next.setEnabled(false);33

Java程序設計簡明教程

finish.setEnabled(false);} } } public void itemStateChanged(ItemEvent e){ for(int j=0;j<4;j++){ if(option[j].getLabel().equals(str[5])&&option[j].isSelected()){ account++;} } } public static void main(String args[]){ xiti5_5 ET=new xiti5_5();} }

上機練習題6 1.編制程序,求如下表達式的值。

M = sin(x)sin(x?y)sin(x?z)+

sin(y)sin(y?x)(y?z)+

sin(z)sin(z?x)(z?y)*E

式中,x,y,z從鍵盤輸入,要求用自定義異常來捕獲異常。E=5,PI=3.14159。【參考程序】

import java.awt.event.*;import java.applet.*;import java.awt.*;import java.math.*;public class xiti6_1 extends Applet implements ActionListener{ Label Label1,Label2,Label3,Label4,Label5;TextField Text1,Text2,Text3;int E=5;double PI=3.14159;double shu[]=new double[3];String answerStra;double jishu[]=new double[3];public void init(){ Label1=new Label(”輸入x的值:“);add(Label1);Text1=new TextField(6);add(Text1);Label2=new Label(”輸入y的值:“);add(Label2);Text2=new TextField(6);add(Text2);Label3=new Label(”輸入z的值:“);add(Label3);Text3=new TextField(6);add(Text3);Label4=new Label(” “);add(Label4);34

上機練習題參考答案

Label5=new Label(” “);add(Label5);Text1.addActionListener(this);Text2.addActionListener(this);Text3.addActionListener(this);} public void actionPerformed(ActionEvent evt){ try{ shu[0]=Double.valueOf(Text1.getText()).doubleValue();shu[1]=Double.valueOf(Text2.getText()).doubleValue();shu[2]=Double.valueOf(Text3.getText()).doubleValue();Label5.setText(”“+ Result1());}catch(NumberFormatException e){ answerStra=”輸入的必需是數字“;Label4.setText(answerStra);} catch(NumberRangeExcetion ee){ answerStra=ee.getMessage();Label4.setText(answerStra);} repaint();} public double Result1()throws NumberRangeExcetion{ int i;double answer=0;try{ jishu[0]=Math.sin(shu[0])/(Math.sin(shu[0]-shu[1])*Math.sin(shu[0]-shu[2]));jishu[1]=Math.sin(shu[1])/(Math.sin(shu[1]-shu[0])*Math.sin(shu[1]-shu[2]));jishu[2]=Math.sin(shu[2])/(Math.sin(shu[2]-shu[1])*Math.sin(shu[2]-shu[0]))*E;for(i=0;i<3;i++){ answer=jishu[i]+answer;} }catch(ArithmeticException eee){ answerStra=eee.toString();} return answer;} } class NumberRangeExcetion extends Exception{ NumberRangeExcetion(String msg){ super(msg);} }

2.用繼承Thread類的方法實現一個多線程程序。程序先后啟動三個線程,每個線程首先打印出一條線程創建信息,然后休眠一個隨機時間,最后打印出線程結束信息退出。

【參考程序】

//文件xiti6_2.java import java.applet.*;import java.awt.*;import java.awt.event.*;import java.math.*;import javax.swing.*;public class xiti6_2 extends Applet implements ActionListener{ 35

Java程序設計簡明教程

JTextArea TextA;JButton Button1;public void init(){ Button1=new JButton(”啟動線程“);add(Button1);TextA=new JTextArea();add(TextA);Button1.addActionListener(this);this.setSize(400,220);} public void actionPerformed(ActionEvent e){ TextA.setText(”創建線程1“+”n“);xiancheng1 aa=new xiancheng1();aa.start();xiancheng2 bb=new xiancheng2();TextA.setText(TextA.getText()+”創建線程2“+”n“);bb.start();xiancheng3 cc=new xiancheng3();TextA.setText(TextA.getText()+”創建線程3“+”n“);cc.start();} class xiancheng1 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”線程1運行結束“+”n“);} catch(InterruptedException e){} catch(Exception v){} } } } class xiancheng2 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”線程2運行結束“+”n“);} catch(InterruptedException ee){} catch(Exception vv){} } } } class xiancheng3 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”線程3運行結束“+”n“);} catch(InterruptedException eee){} 36

上機練習題參考答案

catch(Exception vvv){} } } } } 3.編制程序,同時顯示兩個時區的時鐘,并將時鐘的結果顯示在Fram窗體中。【參考程序】

//文件xiti6_3.java import java.applet.*;import java.awt.*;import java.awt.event.*;import java.lang.NullPointerException;import java.util.*;import javax.swing.*;public class xiti6_3{ public static void main(String[] args){ JFrameDemo frame=new JFrameDemo();frame.init();frame.show();} } class JFrameDemo extends JFrame implements ActionListener{ JTextArea TextA;Date time;thead thead1;JMenuBar myMenu=new JMenuBar();//建立了一個菜單條。

JMenuItem[] fileMenuItems={new JMenuItem(”顯示時間“),new JMenuItem(”隱藏時間“),new JMenuItem(”退出“)};JMenu[] menus={new JMenu(”文件“),new JMenu(”編輯“),new JMenu(”幫助“)};String str1,str2;int datB,datA;long yearB,monthB,dataB;long yearA,monthA,dataA;long hoursB,minutesB,secondsB;long hoursA,minutesA,secondsA;public void init(){ for(int i=0;i

if(e.getSource()==fileMenuItems[0]){ datB=time.getDay();37

Java程序設計簡明教程

datA=time.getDay();switch(datB){ case 1:str1=”星期一“;break;case 2:str1=”星期二“;break;case 3:str1=”星期三“;break;case 4:str1=”星期四“;break;case 5:str1=”星期五“;break;case 6:str1=”星期六“;break;default :str1=”星期日“;break;} switch(datA){ case 1:str2=”星期一“;break;case 2:str2=”星期二“;break;case 3:str2=”星期三“;break;case 4:str2=”星期四“;break;case 5:str2=”星期五“;break;case 6:str2=”星期六“;break;default :str2=”星期日“;break;} yearB=time.getYear()+1900;monthB=time.getMonth()+1;dataB=time.getDate();hoursB=time.getHours();minutesB=time.getMinutes();secondsB=time.getSeconds();yearA=time.getYear()+1900;monthA=time.getMonth()+1;dataA=time.getDate();hoursA=time.getHours()+12;if(hoursA>=24){ hoursA=hoursA-24;} if(hoursB>=0 & hoursB<=12){ dataA=time.getDate()-1;} minutesA=time.getMinutes();secondsA=time.getSeconds();thead1=new thead();thead1.start();} //隱藏時間

if(e.getSource()==fileMenuItems[1]){ TextA.setText(”“);} //退出程序

if(e.getSource()==fileMenuItems[2]){ java.lang.System.exit(0);} } class thead extends Thread{ public void run(){ while(true){ TextA.setText(”n“+” 北京時間“+” 紐約時間“+”n“+”n“+yearB+”年“+monthB+”月“+dataB+”日

上機練習題參考答案

“+str1+” “+yearA+”年“+monthA+”月“+dataA+”日“+str2+”n“);TextA.setText(TextA.getText()+” “+hoursB+”時“+minutesB+”分“+secondsB+”秒“+” “+hoursA+”時“+minutesA+”分“+secondsA+”秒“);try{ sleep(1000);secondsB=secondsB+1;secondsA=secondsA+1;if(secondsB==60){ secondsB=0;minutesB=minutesB+1;} if(secondsA==60){ secondsA=0;minutesA=minutesA+1;} if(minutesB==60){ minutesB=0;hoursB=hoursB+1;} if(minutesA==60){ minutesA=0;hoursA=hoursA+1;} if(hoursB==24){ hoursB=0;dataB=dataB+1;datB=datB+1;} if(hoursA==24){ hoursA=0;dataA=dataA+1;datA=datA+1;} if(datB>7){ datB=1;} if(datA>7){ datA=1;} switch(datB){ case 1:str1=”星期一“;break;case 2:str1=”星期二“;break;case 3:str1=”星期三“;break;case 4:str1=”星期四“;break;case 5:str1=”星期五“;break;case 6:str1=”星期六“;break;default :str1=”星期日“;break;} switch(datA){ case 1:str2=”星期一“;break;case 2:str2=”星期二“;break;case 3:str2=”星期三“;break;case 4:str2=”星期四“;break;

Java程序設計簡明教程

case 5:str2=”星期五“;break;case 6:str2=”星期六“;break;default :str2=”星期日“;break;} if(monthB==1||monthB==3||monthB==5||monthB==7||monthB==8||monthB==10||monthB==12){ if(dataB>31){ dataB=0;monthB=monthB+1;} } if(monthB==4||monthB==6||monthB==9||monthB==11){ if(dataB>30){ dataB=0;monthB=monthB+1;} } if(monthB==2){ if(yearB%4!=0||(yearB%100==0 & yearB%400!=0)){ if(dataB>28){ dataB=0;monthB=monthB+1;} } else{ if(dataB>29){ dataB=0;monthB=monthB+1;} } } if(monthA==1||monthA==3||monthA==5||monthA==7||monthA==8||monthA==10||monthA==12){ if(dataA>31){ dataA=0;monthA=monthA+1;} } if(monthA==4||monthA==6||monthA==9||monthA==11){ if(dataA>30){ dataA=0;monthA=monthA+1;} } if(monthA==2){ if(yearA%4!=0||(yearA%100==0 & yearA%400!=0)){ if(dataA>28){ dataA=0;monthA=monthA+1;} } else{ if(dataA>29){ dataA=0;monthA=monthA+1;40

上機練習題參考答案

} } } if(monthB>12){ monthB=0;yearB=yearB+1;} if(monthA>12){ monthA=0;yearA=yearA+1;} } catch(InterruptedException e){} } } } } 4.使用異常處理機制和輸入/輸出處理機制編寫一個程序,實現當用戶輸入一個文件名時,判斷這個文件名是否存在,若不存在,允許用戶重新輸入,直到輸入了一個正確的文件名后,則打開這個文件并將文件中的內容輸出到屏幕上。

【解題思路】

(1)定義從鍵盤接收數據的標準輸入流對象和文件對象;

(2)在此文件對象的基礎上建立緩沖文件輸入流,如果文件不存在,通過異常處理機制顯示錯誤的處理結果,并要求重新輸入文件路徑;

(3)如果輸入的文件路徑正確,使用緩沖文件輸入流對象的方法將文件中的內容讀取出來,并在屏幕上顯示,然后退出整個程序。

【參考程序】

//文件xiti6_4.java import java.io.*;public class xiti6_4{ public static void main(String args[]){ File f;BufferedReader br;String str;while(true){ try{ InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br1=new BufferedReader(isr);System.out.print(”請輸入文件的全部路徑:“);str=br1.readLine();f=new File(str);br=new BufferedReader(new FileReader(f));while((str=br.readLine())!=null)System.out.println(str);isr.close();br1.close();break;}catch(IOException e){ System.out.println(”輸入錯誤!請重新輸入:“);} } } 41

Java程序設計簡明教程

}

上機練習題7 1.編制Applet程序,使用Graphics類的常用方法,繪制一面五星紅旗。【參考程序】

import java.applet.*;import java.awt.*;import java.awt.Graphics;public class Flag extends Applet{ public void paint(Graphics g){ int x1[]={100,105,118,107,112,100,88,93,83,95,100};int y1[]={60,74,74,82,96,87,96,82,74,74,60};int x2[]={135,137,140,137,138,135,132,133,130,133,135};int y2[]={54,58,58,60,64,62,64,60,58,58,54};g.setColor(Color.red);g.fillRect(60,40,250,160);g.setColor(Color.yellow);g.fillPolygon(x1,y1,11);g.fillPolygon(x2,y2,11);g.copyArea(130,54,10,10,10,15);g.copyArea(130,54,10,10,10,30);g.copyArea(130,54,10,10,0,42);} } 2.編制Applet程序,實現一行文字的動畫顯示,即文字跑馬燈。【參考程序】

import java.awt.*;import java.applet.*;public class ShadowText extends Applet implements Runnable{ private Image img;private Image offI;private Graphics offG;private Thread thread = null;private MediaTracker imageTracker;private int height,width;private String text;private int FontSize;private Font font;private int textcolor, backcolor, shadowcolor;public void init(){ width = this.size().width;height = this.size().height;

上機練習題參考答案

String s = new String(getParameter(”Text“));text = new String(”Hello“);if(s!= null)text = s;FontSize = 30;s = new String(getParameter(”FontSize“));if(s!= null)FontSize = Integer.parseInt(s);s = getParameter(”Fore“);textcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);s = getParameter(”Back“);backcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);s = getParameter(”shadow“);shadowcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);this.setBackground(new Color(backcolor));img = createImage(width,height);Graphics temp = img.getGraphics();temp.setColor(new Color(backcolor));temp.fillRect(0,0,width,height);temp.setColor(new Color(shadowcolor));font = new Font(”TimesRoman“,Font.BOLD,FontSize);temp.setFont(font);temp.drawString(text,10,height*3/4);temp.setColor(new Color(textcolor));temp.drawString(text,10-3,height*3/4-3);imageTracker = new MediaTracker(this);imageTracker.addImage(img,0);try{ imageTracker.waitForID(0);} catch(InterruptedException e){} offI = createImage(width,height);offG = offI.getGraphics();} public void start(){ if(thread == null){ thread = new Thread(this);thread.start();} } public void run(){ int x=width;while(thread!= null){ try{ offG.drawImage(img,x,0,this);repaint();thread.sleep(50);}catch(InterruptedException e){} x-=3;if(x <-width){ x = width;} } } 43

Java程序設計簡明教程

public void update(Graphics g){ paint(g);} public void paint(Graphics g){ g.drawImage(offI,0,0,this);} } 3.編制Applet程序,實現圖片的水中倒影。【參考程序】

//文件Ripple.java import java.awt.*;import java.applet.*;public class Ripple extends Applet implements Runnable{ Thread thread=null;private Graphics g,refraction;private Image image,refimage;private int currentImg;private int imageW=0,imageH=0;private boolean finishLoad=false;private final int frames=12;private String name=”“;public void init(){ String param;param=getParameter(”image“);if(param!=null)name=param;} public void start(){ if(thread==null){ thread=new Thread(this);thread.start();} } public void stop(){ if(thread!=null){ thread.stop();thread=null;} } public void run(){ currentImg=0;g=getGraphics();MediaTracker imageTracker=new MediaTracker(this);image=getImage(getDocumentBase(),name);imageTracker.addImage(image,0);try{ imageTracker.waitForID(0);finishLoad=!imageTracker.isErrorAny();}catch(InterruptedException e){} imageW=image.getWidth(this);imageH=image.getHeight(this);createRipple();repaint();44

上機練習題參考答案

while(true){ try{ if(!finishLoad)return;if(refimage!=null){ g.drawImage(refimage,(-currentImg*imageW),imageH,this);g.drawImage(refimage,((frames-currentImg)*imageW),imageH,this);} g.drawImage(image,0,-1,this);if(++currentImg==frames)currentImg=0;thread.sleep(50);}catch(InterruptedException e){} } } public void createRipple(){ Image offI=createImage(imageW,imageH+1);//創建一個緩沖區圖像 Graphics offG=offI.getGraphics();int phase=0;int x,y;double p;offG.drawImage(image,0,1,this);for(int i=0;i<(imageH>>1);i++){ offG.copyArea(0,i,imageW,1,0,imageH-i);offG.copyArea(0,imageH-1-i,imageW,1,0,-imageH+1+(i<<1));offG.copyArea(0,imageH,imageW,1,0,-1-i);} refimage=createImage((frames+1)*imageW,imageH);refraction=refimage.getGraphics();refraction.drawImage(offI,frames*imageW,0,this);for(phase=0;phase

Java程序設計簡明教程

g.drawImage(image,0,-1,this);} } 4.結合圖形用戶界面與事件處理,創建一個日歷GUI程序,要求能夠選擇并更新顯示2007年12個月份中的任意一個月份的具體信息。

【參考程序】

//文件Calendar.java import java.applet.Applet;import java.awt.*;import java.util.Date;public class Calendar extends Applet{ static final int TOP=90;static final int HEADER=30;static final int NCELLX=7;static final int CELLSIZE=60;static final int MARGIN=8;static final int FEBRUARY=1;Label yearLabel=new Label(”年份:“);TextField yearTextField=new TextField(”1996“,5);Label monthLabel=new Label(”月份:“);Choice monthChoice=new Choice();Button updateButton=new Button(”更新“);Date now=new Date();Font smallArialFont=new Font(”Arial“,Font.PLAIN,15);Font bigArialFont=new Font(”Arial“,Font.BOLD,30);String days[]={”星期日“,”星期一“,”星期二“,”星期三“,”星期四“,”星期五“,”星期六“};String months[]={”一月“,”二月“,”三月“,”四月“,”五月“,”六月“,”七月“,”八月“,”九月“,”十月“,”十一月“,”十二月“};int DaysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};int userMonth;int userYear;public void init(){ setBackground(Color.white);userMonth=now.getMonth();userYear=now.getYear()+1900;yearLabel.setFont(smallArialFont);add(yearLabel);yearTextField.setFont(smallArialFont);yearTextField.setText(String.valueOf(userYear));add(yearTextField);monthLabel.setFont(smallArialFont);add(monthLabel);monthChoice.setFont(smallArialFont);for(int i=0;i<12;i++)monthChoice.addItem(months[i]);monthChoice.select(userMonth);add(monthChoice);updateButton.setFont(smallArialFont);add(updateButton);} public void paint(Graphics g){ FontMetrics fm;int fontAscent;int dayPos;46

上機練習題參考答案

int xSize,ySize;int numRows;int xNum,yNum;int numDays;String dayStr;int margin;String caption;fm=g.getFontMetrics();fontAscent=fm.getAscent();dayPos=TOP+(HEADER+fontAscent)/2;xSize=NCELLX * CELLSIZE;g.drawRect(0,TOP,xSize,HEADER);for(int i=0;ixSize){ xNum=CELLSIZE-MARGIN;yNum += CELLSIZE/2;} } g.setFont(bigArialFont);fm=g.getFontMetrics();margin=2 * fm.getDescent();caption=String.valueOf(userYear)+”年“ +months[userMonth];g.drawString(caption,(xSize-fm.stringWidth(caption))/2,TOP-margin);} public boolean action(Event e,Object o){//事件處理 int userYearInt;if(e.target instanceof Button){ if(”更新“.equals((String)o)){ userMonth=monthChoice.getSelectedIndex();userYearInt=Integer.parseInt(yearTextField.getText(),10);if(userYearInt>1581)userYear=userYearInt;repaint();return true;} } return false;} int NumberRowsNeeded(int year,int month){ //返回某年某月需要的行數 int firstDay;int numCells;if(year<1582)return(-1);47

Java程序設計簡明教程

if((month<0)||(month>11))return(-1);firstDay=CalcFirstOfMonth(year,month);if((month==FEBRUARY)&&(firstDay==0)&&!IsLeapYear(year))return(4);numCells=firstDay+DaysInMonth[month];if((month==FEBRUARY)&&(IsLeapYear(year)))numCells++;return((numCells <= 35)? 5 : 6);} int CalcFirstOfMonth(int year,int month){//計算某年某月的第一天 int firstDay;int i;if(year<1582)return(-1);if((month<0)||(month>11))return(-1);firstDay=CalcJanuaryFirst(year);for(i=0;iFEBRUARY)&& IsLeapYear(year))firstDay++;return(firstDay%7);} boolean IsLeapYear(int year){ //判某年是否是閏年 if((year%100)==0)return((year%400)==0);return((year%4)==0);} int CalcJanuaryFirst(int year){//計算某年一月份的第一天 if(year<1582)return(-1);return((5+(year-1582)+CalcLeapYears(year))%7);} int CalcLeapYears(int year){ //計算閏年一月份的第一天 int leapYears;int hundreds;int fourHundreds;if(year<1582)return(-1);leapYears=(year-1581)/4;hundreds=(year-1501)/100;leapYears-= hundreds;fourHundreds=(year-1201)/400;leapYears += fourHundreds;return(leapYears);} }

上機練習題8 1.設計Java Applet程序,實現在圖片上飄雪花的特效。【參考程序】

上機練習題參考答案

import java.applet.Applet;import java.awt.*;import java.util.Random;public class SnowPic extends Applet implements Runnable{ Thread mainThread;Image offScreen,gAlc[];Random rand;int stopFlag,snows,wind,threadSleep,snowSize;int[] snowX,snowY;long stopTime=0;Dimension dim;MediaTracker mt;public SnowPic(){} int getParameter(String s1,int s2){ String s=getParameter(s1);return(s!=null)?Integer.parseInt(s):s2;} int getParameter(String s1,int s2,int max,int min){ String s=getParameter(s1);if(s!=null){ if((s2=Integer.parseInt(s))>max)return max;else if(s2

Java程序設計簡明教程

mainThread=new Thread(this);mainThread.start();} } public void stop(){ mainThread=null;} public void run(){ while(mainThread!=null){ try{ Thread.sleep(threadSleep);}catch(InterruptedException _ex){return;} repaint();} } public void drawBackSnow(Graphics g){ g.setColor(Color.white);for(int i=0;i=dim.width)snowX[i]=0;if(snowX[i]<0)snowX[i]=dim.width-1;if(snowY[i]>=dim.height||snowY[i]<0){ snowX[i]=Math.abs(rand.nextInt()%dim.width);snowY[i]=0;} } wind=rand.nextInt()%5-2;} public void paint(Graphics g){ offScreen.getGraphics().setColor(Color.black);offScreen.getGraphics().fillRect(0,0,dim.width,dim.height);offScreen.getGraphics().drawImage(gAlc[0],0,0,this);drawBackSnow(offScreen.getGraphics());g.drawImage(offScreen,0,0,null);} public void update(Graphics g){ paint(g);} } 2.設計一個通訊錄,保存讀者信息。要求:通訊錄中包括一般通訊錄中的基本信息,也需要實現普通的檢索功能。通訊錄寫入文件中。程序執行時,需要從文件中導入數據,程序退出后,再將數據保存到文件中。

【參考程序】

import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;import java.math.*;import java.io.*;import java.util.*;import javax.swing.text.*;50

第三篇:java程序設計教案

《Java程序設計》

授 課 人:授課班級:電子商務專業

第一章

Java語言簡介

教學目的要求

? 了解Java的基本特點和用途 ? 掌握如何下載Java SDK軟件包 ? 了解設置Java程序的開發環境SDK ? 如何運行Java程序 ? 了解Java的概貌 主要內容

? Java語言的發展歷程; ? Java語言的特點; ? ? ? ? Java語言的開發工具;

Java應用程序和小程序; Java程序的注釋方法; 寫Java程序的風格規范。

重點內容

? Java語言的特點; ? Java語言的開發工具;

? Java應用程序和小程序;

難點內容

課時分配

1課時 教學方法

講授法、演示法、對比法 講授內容提要

1.1

Java語言的發展簡介

1991年Sun Mircosystem 公司成立了一個Green項目開發小組,Jame Gosling 為組長; 設計Java 采用虛擬機代碼(Virtual Machine Code),即.class文件,它通過解釋器運行 ; 1995年5月Sun Mircosystem 公司對外正式發布Java1.0;

Java2 用途:適用于各種應用開發,尤其是網絡應用,網絡服務和嵌入式系統。1.2

Java語言的特點 1.簡單性 2.面向對象 3.網絡適用性 4.健壯性 5.安全性

6.平臺無關性 7.可移植性 8.解釋型 9.高性能 10.多線程 11.動態性 12.豐富的類庫 13.嵌入瀏覽器運行

1.3

Java類庫的概念 1.4

網絡瀏覽器 1.5

Java開發工具

NetBeans: 這個集成環境可以方便地進行程序的編輯、編譯、生成和運行。J2sdk :

http:// java.sun.com免費下載;Visual J++ 6.0 / 8.0: VJ++還吸收了VB集成開發環境IDE的特征,是一個強有力的Java程序開發工具。Jcreator

Eclipse(MyEclipse)等

1.6

Java程序的分類 基于控制臺的應用程序;

基于瀏覽器運行的小程序applet。

小程序與應用程序的區別是:小程序必須依賴一個HTML文件和支持Java的網絡瀏覽器。老師演示小程序和applet程序

應用程序舉例(程序1-1): public class hello {

public static void main(String args[ ]){

System.out.println(“Hello Java!”);

} }

小程序舉例(程序1-2):

import java.awt.Graphics;

// 注意該行的含義 import java.applet.Applet;public class sayhello extends Applet {

public void paint(Graphics g){

g.drawString(“Hello Java!”,35,30);

} }

小程序對應的HTML文件:

height=100 width=200>

1.7

1.8 對Java程序的解釋

編寫Java程序的風格要求 課堂練習:

請編寫一個應用程序輸出你自己的學號和姓名 課外練習(作業): 下載并安裝J2SDK; 設置系統環境變量 下載并安裝MyEclipse 熟悉MyEclipse的開發環境

第2章

數據類型、運算符和表達式

教學目的要求

? 掌握字符常量和符號表示的常量的概念和應用 ? ? ? ? 掌握整形、浮點型、字符型和布爾型變量的概念和應用 掌握數據的概念 理解參數傳遞方式

學會邏輯運算符、算術運算符和位運算符的使用方法

主要內容

? 常量:包括字面常量和符號表示的常量; ? 變量:整形、浮點型、字符型和布爾型; ? 數組:Java的數組屬于類類型; ? 參數傳遞方式;

? 運算符:包括邏輯運算符、算術運算符和位運算符等;

重點內容

? 整形、浮點型、字符型和布爾型變量的概念和應用; ? 符常量和符號表示的常量的概念和應用

難點內容

? 參數傳遞方式

課時分配

2課時 教學方法

講授法、演示法、對比法、實驗驗證法 講授內容提要

2.1

常量

整形常量:采用八進制、十進制、十六進制表示,但不能采用二進制表示,和C/C++中的一樣。

浮點常量:采用十進制或科學記數法表示。在缺省情況下一個浮點數是double型。布爾常量:true和false,它們不是數,不能進行算術運算。字符常量:與C/C++中的表示類似

。字符串常量:Java中字符串常量是對象。

2.2

變量

變量的命名原則是:以字母(’a’?’z’和 ’A’?’Z’)、下劃線(‘_’)和‘$’符號開頭的,由字母、數字(’0’?’9’)、下劃線和‘$’構成的一個符號序列。

例如,a,_a,NameOfStudent,$10均是合法變量名,而-a和9a是非法變量名。關鍵字不能用作變量名(見表2-1)注意:Java對變量是區分大小寫.2.2.1

整形類型的變量 字節(byte)型,8個位。

短整形(short),占16個位。整形(int),占32個位。

長整形(long int),占64個位。

Java中的整形最值均有符號。例如程序2-1測試最值:

public class Test_Int {

// 程序2-1 測試整形變量的最值

public static void main(String [ ] args){

System.out.println(Byte.MAX_VALUE);

System.out.println(Byte.MIN_VALUE);

System.out.println(Short.MAX_VALUE);System.out.println(Short.MIN_VALUE);

System.out.println(Integer.MAX_VALUE);

System.out.println(Integer.MIN_VALUE);

System.out.println(Long.MAX_VALUE);

System.out.println(Long.MIN_VALUE);

} }

注意: byte、short、int、long是原子類型,而Byte、Short、Integer和Long分別是四種原子類型對應的類類型。

2.2.2

字符類型變量

Java字符量的長度為16個位,表示范圍是從‘u0000’ 到 ‘uffff’ 即從0 到 65535; Character是char類型對應的類類型 ; 最大值 Character.MAX_VALUE ; 最小值 Character.MIN_VALUE ; 2.2.3

浮點類型變量 分類:float和double。

Float、Double 是對應的類類型 ;

Float.MAX_VALUE、Float.MIN_VALUE是最值。Float.POSITIVE_INFINITY 和

Float.NEGATIVE_INFINITY是正/負無限大。2.2.4

布爾類型變量

boolean變量取值:true和false ;

true和false不能轉換成任何數值表示,true不是1,false也不是0。

2.2.5

原子類型變量的生存空間

一個變量的生存空間是由兩個大括號決定的 范圍。下列寫法在C/C++中是正確的,但在Java中是錯誤的(注意)。{

int x=1;{ int x=0;// 錯誤 } }

2.3

變量賦值問題

如果類中定義的原子類型變量,未給出初值,那么它們將有缺省值 :byte、short、int 和long變量的缺省值是0;char、float、double和boolean變量的缺省值分別是’u0’、0.0f、0.0d和false。

方法內定義的局部變量,應當對其賦值,否則無法通過編譯。例如: // 程序2-4 class Test {

// 定義一個類

int Value;// 類中的變量未賦值,缺省就是0 } public class Test_Var{ public static void main(String [ ] args){

int x=100;

// 必須賦值,否則無法通過編譯

Test obj=new Test();// 對象賦值

System.out.println(obj.Value +“

”+x);

} } 2.4

數組

Java數組是系統定義類Array 的子類; 數組的分類同C/C++:一維和多維。

2.4.1

一維數組

定義數組的格式 :int a[ ] ; 或

int[ ] a ;其值是null ;

在定義數組時不能指定大小。a僅是一個引用,代表一個數組名,但沒有對應的空間。產生數組空間的方法有兩種 :

在定義時直接賦值:int a[ ]={1,2,3};

通過new分配空間: int a[ ]=new int[10];public class Test_Array{

public static void main(String [ ] args){

int a[ ]={1,2,3}, b[ ];

b= a;

for(int i=0;i<3;i++)b[ i ]++;

for(int i=0;i<3;i++)System.out.println(a[i]);

} }

public class Test_Array{

public static void main(String [ ] args){

int a[ ]={1,2,3}, b[ ];

b = new int[6];

System.out.println(“b數組長度 = ” + b.length);

for(int i=0;i

System.out.print(b[i]+“

”);

} }

注意:(1)獲得數組元素的個數:數組名.length;

(2)一個整形數組若僅僅采用new分配空間,而沒有對其賦值,那么每個元素的值是0

注意:Java數組名是一個引用,當將一個數組名賦值給另一個數組時,實際上是名字的復制 2.5

Java中的參數傳遞方式

Java的參數傳遞的形式有兩種:基本類型按值傳遞,對象類型按引用傳遞;

通過return語句從方法中返回時,基本類型總是以值的方式返回,而對象總是以引用方式返回。例如程序2-8 : class test{ int x;} public class Test_Paras {

static test fun(test o,int y){ o.x=20;

}

} y=1;

return o;public static void main(String [ ] args){ test obj1 , obj2;int

Val = 3;obj1=new test();obj1.x=100;

obj2=fun(obj1,Val);

System.out.println(obj1.x+“ ”+ obj2.x+“ ”+Val);

} 2.6

Java的運算符 主要包括:

算術運算符、關系運算符、邏輯運算符、位運算符和三元條件運算符。2.6.1

算術運算符

算術運算符:+、-、*、/、%、++和--,與C/C++基本相同。

%運算符不但可以對整形數據運算,而且可以對浮點型數據運算。例如:3.14 % 2.5的值約等于0.64 ; 隠式數據類型轉換:

當整型與浮點型數據進行混合運算時,表達式中的數據類型會進行相應的自動轉換,規則為:byte->short->int->long->float->double。

這種轉換規則也適應于賦值語句,當賦值符左右兩側變量類型不一致時,只要轉換過程中不丟失數據,便進行自動轉換。

class number { int x;}

public class relationalOperator{

public static void main(String args[ ]){

} number n1,n2;

n1=new number();

n2=new number();n1.x=1;

n2.x=1;if(n1.x==n2.x)

System.out.println(“對象的數據成員x相等!”);

if(n1==n2)

System.out.println(“n1和n2是一個對象!”);else

System.out.println(“n1和n2不是一個對象!”);}

2.6.2

關系運算符

關系運算符不能同其它類型的變量一同

參與運算,例如假設a,b,c是三個整形的變量,那么 a=b==c 是

正確 OR 錯誤? ;

關系運算符用于對象時,是判別兩個引用是否代表同一個對象。而不是判斷兩個引用所指向的對象是否同屬一個類。

2.6.3

邏輯運算符

邏輯運算符有&&、|| 和!,分別是與、或和非。運算結果是true或false;

邏輯運算有求值“短路”現象,例如程序2-11 : public class shortCut {

static boolean testOne(int x){ System.out.println(x+“ < ”+1+“ ” +(x<1));return x < 1;}

static boolean testTwo(int x){ System.out.println(x+“ < ”+1+“ ” +(x<2));return x < 2;

}

public static void main(String [ ] args){

} if(testOne(6)&& testTwo(1))System.out.println(“表達式為真”);else

System.out.println(“表達式為假”);

}

2.6.4

位運算符 位運算符:&、|、^、~、<<、>>,分別稱為位與、或、異或、左移、右移;

Java引入一個專門用于邏輯右移運算符>>>,它采用了所謂的零擴展技術,不論原值是正或負,一律在高位補0。例如:

int a=-2 , b;

b=a>>>30;2.6.5

三元條件運算符 語法格式:(exp)?(exp1):(exp2);

Java要求:(exp1)與(exp2)必須同類型。2.6.6

“+”運算符

Java對“+”進行了重載,可以將任何類型的對象(包含原子類型)轉化為String類型。例如:

int x=1;char ch='A';double d=9.8;System.out.println(“Result: ”+x+ch+9.8);課堂練習:

課外練習(作業):

P32 3、4、6題。

第3章

控制語句

教學目的要求

? 了解Java程序的結構,學習使用各種語句結構來控制程序的流程,完成程序的功能任務。

主要內容

? Java的分支語句; ? 循環控制語句;

? break和continue語句;

? 帶標號的break和continue語句。

重點內容

? Java的分支語句; ? 循環控制語句;

? break和continue語句;

難點內容

? 循環控制語句;

? break和continue語句;

課時分配

3課時 教學方法

講授法、演示法、對比法、實驗驗證法 講授內容提要

3.1

分支語句 if-else語句;

switch-case語句。

3.1.1

if 語句

if語句的語法格式 同C/C++;

條件表達式必須是布爾類型,例如:

下面的寫法在C/C++中是合法的,但在Java中卻是非法的 : int i=10;if(i)

...程序3-1描述了用applet從文本框獲取數據,然后將比較的結果顯示出來。

// 程序 3-1 import java.awt.*;import java.applet.*;

public class compareNumbers extends Applet{

Label lab1,lab2;TextField input1,input2;

int num1,num2;public void init(){ lab1=new Label(“輸入第1個整數”);

input1=new TextField(10);

lab2=new Label(“輸入第2個整數”);input2=new TextField(10);

add(lab1);

add(input1);add(lab2);add(input2);} public boolean action(Event e , Object o){

} if(e.target==input1 || e.target==input2){ num1=Integer.parseInt(input1.getText());

num2=Integer.parseInt(input2.getText());

if(num1num2)showStatus(num1+“ > ”+num2);else showStatus(num1+“ == ”+num2);} return true;} 3.1.2

switch 語句

switch語句的語法結構 同C/C++;

switch后面的表達式類型必須是字符類型或整形 ; case后面的常量不能重復 ;

程序3-3采用小程序實現將學生的百分制成績轉換為優、良,中、及格和不通過五個等級: // 程序3-3 import java.awt.*;import java.applet.*;

public class scoreConvert extends Applet{

Label prompt;

TextField input;int Excellent,Good,Middle,Pass,Failure;public void init(){ prompt=new Label(“輸入成績”);

} public void paint(Graphics g){ g.drawString(“各等級的人數:”,25,40);g.drawString(“優秀

: ”+Excellent,25,55);g.drawString(“良好

: ”+Good,25,70);g.drawString(“中等

: ”+Middle,25,85);g.drawString(“及格

: ”+Pass,25,100);g.drawString(“不通過: ”+Failure,25,115);input=new TextField(2);add(prompt);add(input);} public boolean action(Event e , Object o){

int score=Integer.parseInt(input.getText());

showStatus(“");

input.setText(”“);

switch(score/10){

case 10: case 9: Excellent++;

break;case 8: Good++;

break;case 7: Middle++;

break;case 6: Pass++;

break;case 5:

case 4:

case 3: case 2:

case 1:

case 0: Failure++;

break;default: showStatus(”輸入有誤,重新輸入!“);

}

repaint();

return true;} } 程序3-3需要注意的地方

在action()方法中調用的repaint()方法,是一個系統方法,它具有自動調用paint()方法的能力,從而實現對網頁的刷新。3.2

循環控制語句

Java中的循環控制語句有三種,分別是:while,do-while和for語句;循環體內的語句會反復執行,直到控制布爾表達式的值變為false為止。3.2.1

while語句 while語句格式:

while(Boolean-Expression)

StatementS

程序示例3-4 略

3.2.2

do-while語句

do-while語句的語法格式如下: do{

Statement }while(Boolean-Expression);

程序3-5 如下:

// 產生一個大于0.9的隨機數為止 public class GenerateDoubleNumbers {

public static void main(String args[ ]){

} double d;do{ d=Math.random();System.out.println(d);

}while(d<0.9);} 3.2.3

for語句

for語句語法格式如下:

for(ForInitopt;Boolean-Expression;ForUpdateopt)

Statement // 程序3-6輸出一個*三角形

public class printGraphics extends Applet{

public void paint(Graphics g){ int xpos,ypos=0;

for(int row=6;row>=1;row--){ xpos=25;ypos+=15;

} for(int column=1;column<=row;column++){

} g.drawString(”*“,xpos,ypos);xpos+=7;

} } 3.3

break語句和continue語句

3.3.1

不帶標號的break語句和continue語句

break語句可以跳出包含它的最內層的循環,不再執行剩余的語句;

continue語句停止執行當前的循環,回到循環處,開始執行下一輪的循環。這些特性和C/C++的功能一樣。for(int i=1;i<10;i++)

{

if(i%3==0)

continue;

else

System.out.println(”i = “+i);

}

for(int i=1;i<10;i++)

{

if(i%3==0)

break;

else

System.out.println(”i = “+i);

}

課堂練習:

1、仔細分析下面程序,寫出程序的最終運行結果。public class s_switch {

public static void main(String args[])

{

int ch=8;

int r=10;

switch(ch-1){

case 7: r=r+3;

case 8: r=r+5;

case 9: r=r+6;break;

default:;

}

System.out.println(”r=“+r);

} }

2、隨機產生26個英文字母a~z,直到大于u為止。用while和for語句實現。

課外練習(作業):

P44

1—4

第4章

Java的類

教學目的要求

? 理解面向對象編程的基本概念 ? 了解類的封裝方法

? 如何創建類和對象

? 了解成員變量和成員方法的特性

? 學習使用OOP方式進行程序設計

? 深刻理解類的繼承性和多態性

主要內容

? 類的定義和使用; ? 方法的定義和使用; ? 實例變量和局部變量; ? 構造方法; ? ? ? ? 方法的覆蓋和重載; 關鍵字this的用法; 繼承的概念和應用; 組合與繼承;

? 抽象方法和抽象類;

? 對象類型轉換;

? 訪問權限限制符:public、private、protected。

重點內容

? 類的定義和使用; ? 方法的定義和使用; ? 構造方法;

? 方法的覆蓋和重載; ? 關鍵字this的用法; ? ? ? ? 繼承的概念和應用; 組合與繼承;

抽象方法和抽象類; 對象類型轉換;

難點內容

? 構造方法;

? 方法的覆蓋和重載; ? 繼承的概念和應用; ? 組合與繼承; ? 抽象方法和抽象類

課時分配

8課時 教學方法

講授法、演示法、對比法、實驗驗證法、學生討論法 講授內容提要

4.1

類與對象

在Java程序中,除原子類型的變量以外都是對象,連Java程序本身也不例外。

類是面向對象程序設計的基礎,OO始終是圍繞著對象的封裝性、繼承性和多態性展開討論的。

4.1.1

類與對象的區別

類是一個抽象的概念,對象是一個具體的概念。

類是在一組對象的基礎上,通過抽象和概括獲得的一個概念。

對象是由數據和方法緊密結合的一個封裝體,具有信息隱藏的能力。

對象可以通過方法(函數)與其它對象進行通信,但并不知道這些方法的實現細節。4.1.2

Java和C編程思想的區別

C是結構化的編程語言,以函數為編程單元,程序員把注意力集中在編寫函數上。Java是面向對象的編程語言,以類為編程單元,程序員的精力集中在對類的設計上。

對象將實例變量(instance variable)和對數據的操作(即方法)約束在一起,類似一個獨立的程序,易于擴充,易于維護,代碼可復用。

4.1.3

如何定義類

類是對象的模板,它定義了對象的結構和操作數據的方法。public class Sayhello extends Applet {

public void paint(Graphics g){

int xPos=35;

int yPos=30;

g.drawString(”Hello Java!“,xPos,yPos);

} } 定義類的通用格式如下:

class className extends superClassName{ type instance-vairbale1;return-type methodName1(parameter-list){

method-body;} }

public class Hello {

public static void main(String args[ ]){

System.out.println(”Hello Java!“);

} }

系統類Object是整個類層次結構中的根。

如果我們要定義Object的子類,可以不指明extends Object,默認情況下一個類就是Object類的子類。

類內定義的變量稱為實例變量,函數稱為方法;

Java將類的定義和類的實現放在一起,便于系統維護。例如: class point {

// Object類的子類

int x , y;

void init(int a, int b){

int i=0;

x=a;

y=b;

}

} 4.1.4

對象和引用

對象是客觀存在的變量,對象的引用就是對象的名字,例如:Point

p1;創建對象:p1=new Point();

一個對象可以有多個別名;

p2=p1;將一個變量設置為null,表明該變量不代表任何對象 :

p1 = null;

每個對象都有自己的變量,改變一個對象的實例變量并不影響到另外一個對象。例如: class Point { // 程序4-1

int x , y;

void init(int a, int b){

x=a;

y=b;

}

} public class TwoPoint{

public static void main(String [ ]args){

Point p1= new Point(), p2= new Point();

p1.x=10;p2.x=30;p1.y=20;p2.y=40;System.out.println(”x = “+ p1.x +” y= “+p1.y);System.out.println(”x = “+ p2.x +” y= “+p2.y);

} } 4.2

方法

方法是一個功能模塊,類似C中的函數;

方法和實例變量都必須定義在類內,方法是類的功能接口 ;

定義方法的原則:方法應當只執行單一的任務,并且方法名能有效地表達該任務; 方法的返回值類型、方法名和參數表共同稱之為方法的特征。調用方法的格式:引用.方法名(參數表);例如:

Point

p1=new point(),p2=new point();Point p3=p2;p1.init(10,20);//僅對p1對象的x和y進行賦值 p2.init(30,40);//僅對p2對象的x和y進行賦值

對象是客觀存在的變量,對象的引用就是對象的名字,例如:point

p1;創建對象:p1=new point();

一個對象可以有多個別名;

p2=p1;將一個變量設置為null,表明該變量不代表任何對象 :

p1 = null;

每個對象都有自己的變量,改變一個對象的實例變量并不影響到另外一個對象。

4.3

實例變量和局部變量 class Loc {

// 程序4-2

int x=1;// 實例變量

void printLocVar(){

int x=25;// 局部變量

}

System.out.println(”n x is :“+x);

++x;

System.out.println(” x is :“+x);

void printInstanceVar(){

System.out.println(”n x is :“+x);

x*=10;

System.out.println(x is :”+x);} } public class TestInstanceVar { // 程序的主類

public static void main(String args[ ]){

System.out.println(“ x is :”+x);

obj.printLocVar();

obj.printInstanceVar();

System.out.println(“ x is :”+x);

loc obj=new Loc();

int x=5;

// 局部變量 x }

} 4.3

實例變量和局部變量

Java中的變量分為兩種:類內定義的實例變量,方法中定義的局部變量。

在同一個作用域內,不允許定義兩個同名的局部變量。

局部變量可以掩蓋實例變量。

實例變量屬于對象,它描述了對象的屬性,隨著對象的存在而存在;

局部變量是隨著方法的調用而存在,一旦方法調用結束,局部變量也就消亡了。4.4

構造方法

構造方法的功能是在創建對象時初始化對象的實例變量; 討論:構造方法的特點: 無返回值,無void 方法名與類名相同 僅在創建對象時調用 class point { // 程序4-3

}

public class createPoint {

public static void main(String args[ ]){

point

p= new point(10,20);

System.out.println(p.x +“ ”+p.y);} int x, y;point(int a, int b){

} x=a;y=b;

} 如果類中沒有定義構造方法,編譯器會自動創建一個缺省的、不帶參數的構造方法。構造方法是在對象創建之后,new操作完成前被調用的。

4.5

方法重載

方法重載是在一個類中定義二個或多個同名的方法,但方法的參數個數或類型不完全相同;例如: class

point { int x, y;point(int a, int b){ x=a;y=b;} point(){ x=-1;y=-1;}

point(double a, int b){ x=(double)a;y=b;} } 方法重載的一個誤區:是靠返回值區別重載,即定義多個方法,它們的名稱和形參類型完全相同,但返回值不同,這是不允許的;

4.6

關鍵字this

this指代對象,是對當前對象的一個引用。例如: class IntVector { // 程序4-6 int v[ ];

boolean equals(IntVector other){

if(this == other)return true;

return false;} } class testIntVector {

public static void main(String args[ ]){

IntVector

t1=new IntVector(),t3=new IntVector(),t2=t1;

System.out.println(t1.equals(t2));

System.out.println(t3.equals(t2));

} }

Java中的級連調用,仍是指代當前對象的this。例如:// 程序4-7 import java.awt.*;import java.applet.*;

class time{

private int hour, min, sec;

time(){ setHour(0);setMin(0);

setSec(0);}

time setHour(int h){

hour=((h>=0 && h<24)? h: 0);return this;} time setMin(int m){

min=((m>=0 && m<60)? m: 0);

return this;}

time setSec(int s){

sec=((s>=0 && s<60)? s: 0);

return this;}

String tostring(){ return hour+“:”+min+“:”+sec;} public class timeToString extends Applet{

private time t;

public void init(){

}

t=new time();}

public void paint(Graphics g){ t.setHour(18).setMin(30).setSec(20);

} g.drawString(“ time:”+t.tostring(),25,45);} 在構造方法內部使用this,它用于指代另外一個構造方法,但不能指代非構造方法。例如: class point {

}

4.7

繼承

繼承是軟件重用的一種形式,可以提高系統的性能;

繼承語法:

class className

extends

superClassName{

各實例變量和方法的定義

}

例如: class point{

int x, y;

point(int x, int y){

this.x=x;this.y=y;}

point(){ this.x=0;

this.y=0;} }

class circle extends point{

int

radius;

circle(int r, int x, int y){

radius=r;

this.x=x;

this.y=y;

} } Java不支持多繼承,但支持多接口;

子類的對象也是其超類的對象,反之未必;

繼承具有傳遞性:

B繼承于A,C又繼承于B,則C也繼承了A中的實例變量和方法。

關鍵字super

構造方法是一種特殊的方法,子類不能繼承超類的構造方法,但子類構造方法可以通過super調用超類的構造方法。int x, y;point(){ this(-1,-1);} point(int a, int b){ x=a;y=b;}

當創建子類對象時,首先執行超類構造方法,然后執行子類的構造方法。例如: class point{

// 程序4-8

int x, y;

point(int x, int y){

} } class circle extends point{

int radius;

circle(int r, int x, int y){

super(x, y);

radius=r;

System.out.println(“子類構造函數被調用!”);

this.x=x;this.y=y;

System.out.println(“父類構造函數被調用!”);

} } public class testInherence {

public static void main(String args[ ]){ circle

c1;

c1=new circle(1,1,1);

} }

再次討論構造方法

若父類沒有定義構造方法,那么對父類數據的初始化將采用系統缺省的構造方法;例如: class point{

int

x, y;

}

class circle extends point{

int radius;

circle(int r, int x, int y){

this.x=x;

this.y=y;

radius=r;

} } 若父類定義有缺省構造方法,那么子類可根據自己的需要設置自己的構造方法。例如: class point{

int x, y;

point(){

this(0,0);

}

point(int x, int y){

this.x=x;this.y=y;

} } class circle extends point{ // 注意子類的構造函數

int radius;

circle(int r, int x, int y){

radius=r;} } 若父類定義的構造方法都是有參的,那么子類構造方法必須通過super調用父類構造方法,class point{

private int x, y;

point(int x, int y){

this.x=x;

this.y=y;

} } class circle extends point{

int radius;

circle(int r, int x, int y){

super(x, y);

radius=r;

} } 4.8

方法的覆蓋

方法的覆蓋發生在父類和子類之間,若子類中定義的某個方法的特征,與父類中定義的某個方法的特征完全一樣,那么就說子類中的這個方法覆蓋了父類對應的那個方法。

4.8.1

覆蓋與重載的區別 重載可以出現在一個類中,也可以出現在父類與子類的繼承關系中,并且重載方法的特征一定不完全相同。

覆蓋特點:子類中的方法特征與父類定義的對應方法的特征完全一樣。例如: // 程序4-9 class point{

int x, y;

point(){ this(0,0);}

point(int x, int y){

this.x=x;this.y=y;

}

double area(){ return 0;} }

class circle extends point{

int radius;

circle(int r, int x, int y){super(x, y);

radius=r;

}

double area(){ return Math.PI*radius*radius;} } public class testOverWrite {

public static void main(String args[ ]){

} circle c1;

c1=new circle(1,1,1);

System.out.println(c1.area());} 4.8.2

方法的動態調用

Java的所有對象運行時都有一個類型標識(RTTI:Run-Time Type Identification),該標識記錄了每個對象所屬于的類。Java用此標識在運行時選擇正確的方法。例如: // 程序4-11 class point{

int x, y;

point(){ this(0,0);}

point(int x, int y){ this.x=x;this.y=y;

}

double area(){ return 0;} }

class circle extends point{

int radius;

circle(int r, int x, int y){ super(x, y);

radius=r;}

double area(){

// 覆蓋了父類的area方法

return

Math.PI*radius*radius;

} } public class dynamicalCall {

public static void main(String args[ ]){

point p[ ]={new point(2,2), new circle(1,1,1)};

for(int i=0;i

System.out.print(“類名: ”+

} p[i].getClass().getName());System.out.print(“父類:”+ p[i].getClass().getSuperclass());System.out.println(“

面積: ”+ } p[i].area());} 子類對象調用方法時:

(1)子類檢查是否具有同名和同參數類型的方法,若有則調用該方法,否則繼續執行。

(2)到父類中尋找同名和同參數類型的方法,若有則調用該方法。若找不到,將產生編譯錯誤。

對象決定自己到底該調用哪個方法,取決于該對象在繼承鏈中的位置。

4.9

多態性不適合繼承鏈中的實例變量 引用.方法:根據多態性調用;

引用.實例變量:根據引用的類型調用。即:多態性僅僅適用于方法的調用,而不適合實例變量。例如: class Base{

// 程序4-12

int x=1;void print(){ System.out.println(“當前類為 ”+

}

this.getClass().getName());System.out.println(“對象的x= ”+this.x);

} class Derived extends Base{

} int x=2;void print(){ System.out.println(“當前類為 ”+

}

this.getClass().getName());System.out.println(“對象的x= ”+this.x);

public class confusions{ public static void main(String [ ] args){

Base obj=new Derived();

}

}

obj.print();System.out.println(“對象的x= ”+obj.x);

4.10

finalize

Java的垃圾回收器具有自動回收垃圾的能力。

垃圾回收器是一個優先級比較低的線程,在系統空閑時運行。

在對象被回收之前,有時需要執行一些特殊的操作,例如保存文件、清除屏幕等,這時就要用Java的finalize方法。例如: class point{

// 程序4-13

int x, y;

point(int a, int b){

} x=a;y=b;System.out.println(“point constructor:”+getString());

public void finalize(){

// 注意該方法

System.out.println(“point finalizer:”+getString());

}

String getString(){ return “x=”+x+“ y=”+y;

} } class circle extends point{

int radius;

circle(int r, int a, int b){ super(a,b);radius=r;System.out.println(“circle constructor:”+getString());

}

public void finalize(){

System.out.println(“circle finalizer:”+getString());

}

String getString(){

return super.getString()+“

radius=”+radius;

} } public class testFinalize {

public static void main(String args[ ]){

point c1,c2;c1=new circle(1,1,1);c2=new circle(2,2,2);c1=null;c2=null;System.gc();

} }

4.11

static

static修飾變量(與C中的不同);

static修飾方法(與C中的不同);

4.11.1

static變量

static變量是指這樣的成員變量:不管在程序運行中生成多少個該類的對象,它們都共享該變量。

即使沒有創建對象,該變量仍然存在。因此,static變量又稱為類變量。定義格式為:static type variableName;

static變量和一般的實例變量不同,在構造方法中不能對它進行初始化。例如: class point{

// 程序4-14

static int count;int x, y;static{ // 靜態初始化塊

}

} count=0;System.out.println(“static variable is initialized!”);

point(int a, int b){ count++;x=a;

y=b;

System.out.println(“Call point constructor!”);} public class testStaticVariable {

public static void main(String args[ ]){ point c1=new point(0,0);

System.out.println(“There are ”+

}

4.11.2

static方法

(可舉例說明Math類的PI和sqrt等,為什么要用靜態變量。)static方法是類中的成員方法,它屬于整個類,即使不創建任何對象,也可使用靜態方法。調用靜態方法格式:類名.方法名(參數); 在子類中不能覆蓋父類中定義的靜態方法。

靜態方法中只能出現靜態變量和其它靜態方法。并且還不能使用this和super。例如: class point{

// 程序4-15

static int count;

int x, y;

static{ count=0;System.out.println(“static variable is initialized!”);

// 定義靜態變量 } point.count +“ points”);

}

point(int a, int b){

count++;x=a;y=b;

System.out.println(“Call point constructor!”);

}

static int getCount(){ // 靜態方法 return count;

} } public class testStaticMethod {

public static void main(String args[ ]){

} point c1=new point(0,0);point c2=new point(1,1);

System.out.println(“There are ”+ point.getCount()+“ points”);} 4.12

關鍵字final

在實例變量、局部變量和方法的形參定義之前加上final,那么這個變量值只能被引用,而不能修改。

final修飾的局部變量和實例變量必須給出初值,因為它修飾的變量代表一個常量。例如: class Base{ // 程序4-16 final int x=1;

// 形式1:修飾實例變量

}

public class finalVariables{

public static void main(String [ ] args){ final int var=100;// 形式3:修飾局部變量

} Base obj=new Base();

obj.print(var);void print(final int y){ // 形式2:修飾參數

// y=0;

// 錯誤

} System.out.println(x+y);

} 在方法定義前加上final,該方法就不能被子類覆蓋,成為終極方法 ;

包含終極方法的類仍然可以被子類繼承,子類雖然不能覆蓋父類中的終極方法,但可以重載該方法。例如: class Base{

final int x=1;

}

class Derived extends Base { void print(){ // 重載了父類中的print方法

} System.out.println(x);final void print(int y){

}

// 父類中的final方法

System.out.println(x+y);}

4.12.3 final類

在一個類定義前加上final,意味著這個類就不能被其它類繼承,成為終極類。

系統類基本上都是final類,如String類。

將class定義為final是為了杜絕繼承,類中的方法自然都變成了終極方法。例如: final class Base{ // 聲明為final類

final int x=1;

void print(final int y){

System.out.println(x+y);

} }

// 錯誤:不能繼承final 修飾的Base類 class Derived extends Base { }

4.13

組合與繼承

面向對象中的軟件重用表現為兩種形式:繼承和對象組合。

設計這類程序的關鍵是構造方法:子類構造方法調用父類構造、成員對象的初始化。class date{ // 程序4-17

int year, mon,day;

date(int y, int m, int d){ year=y;

mon=(m>0 && m<13)?m:1;day=checkday(d);

}

int checkday(int d){

int daydisp[ ]={0,31,28,31,30,31,30,31,31,30,31,30,31};

if(d>0 && d<=daydisp[mon])

return d;

if(mon==2 && d==29 &&(year%400==0 ||

year%4==0&& year%100!=0))

return d;return 1;

}

String tostring(){ return year+“/”+mon+“/”+day;} }

class employee{ // 雇員類

long id;date birthday;

例如:

employee(long no, int year, int mon, int day){ id=no;

// 設置組合對象

}

String tostring(){

return id+“ , ”+birthday.tostring();} birthday=new date(year,mon,day);}

class manager extends employee { // 經理類

double basePay;

String tostring(){

return basePay+“ , ”+super.tostring();} } public

class compositionAndInherence {

} public static void main(String [ ] args){ manager

boss;

}

boss=new manager(1001,1971,11,5);System.out.println(boss.tostring());

manager(long no, int y, int m, int d){ super(no,y,m,d);

// 調用父類構造函數

} basePay=1000;

4.14

抽象類和抽象方法

抽象方法:僅有方法特征,但沒有代碼; 抽象類:包含抽象方法的類。

抽象類的作用:提供一種適當的超類,子類通過繼承實現父類中的抽象方法。

抽象類不能用final修飾。

抽象類體現了多態性,通過繼承可以從抽象類派生出具有相似操作的子類。例如: abstract instrument abstract void play()繼承 wind void play()繼承 繼承 stringed void play()percussion void play()繼承 繼承 woodwind void play()brass void play()

// 程序4-18 abstract class instrument{

abstract void play();}

// wind不是抽象類

class wind extends instrument{

void play(){ System.out.println(“wind play!”);} }

// percussion也不是抽象類

class percussion extends instrument{

void play(){ System.out.println(“percussion play!”);} }

// stringed也不是抽象類 class stringed extends instrument{

void play(){ System.out.println(“stringed play!”);} }

class woodWind extends wind{ // 覆蓋父類中的play方法

void play(){System.out.println(“woodWind play!”);} }

class brass extends wind{

// 覆蓋了父類中的play方法

void play(){ System.out.println(“brass play!”);} } public

class music { static void tuneAll(instrument e[ ]){

} for(int i=0;i

e[i].play();

// 抽象方法

public static void main(String [ ] args){ instrument orchestra[ ] = new instrument[5];int i=0;

orchestra[i++]=new wind();orchestra[i++]=new percussion();orchestra[i++]=new stringed();orchestra[i++]=new woodWind();orchestra[i++]=new brass();tuneAll(orchestra);

} } 程序運行結果: wind play!percussion play!stringed play!woodWind play!brass play!

4.15

對象的類型轉換 4.15.1

向上類型轉換

從子類向父類轉換,在繼承圖中是向上移動,通常稱為向上類型轉換。

類型向上轉換是安全的,因為這是從特殊類型到通用類型的轉換。

進行向上類型轉換時,出現的唯一問題是可能丟失子類中定義的方法和變量。例如: // 程序4-19 class point{

int x, y;

point(int x, int y){

this.x=x;this.y=y;} int getX(){

return x;} }

class circle extends point{

int radius;circle(int r, int x, int y){ super(x, y);radius=r;} double area(){

return Math.PI*radius*radius;

} } public

class testUpCasting {

} public static void main(String [ ] args){

circle c=new circle(1,1,1);point p=c;// 注意:p和c的類型不同 } System.out.println(p.getX());4.15.2

向下類型轉換

從父類向子類轉換,在繼承圖中是向下移動,稱為向下類型轉換。

類型向下轉換是不安全的,因為這是從一般類型到特殊類型的轉換。例如: public static void main(String [ ] args){

}

4.16

訪問權限限制

Java提供的訪問權限修飾符有四個,即public、private、protected和友元;

修飾符要置于每個類成員(實例變量和成員方法)的定義之前,且僅能控制它所修飾的那個成員。

4.16.1

友員

缺省修飾符的情況就是友員。友員修飾符意味著同一個目錄(包)中的所有類都可以訪問這種類型的成員。

friendly不屬于Java關鍵字,是C++的一個關鍵字。

例如: public class Base{

// 該類位于Base.java文件中

int friend_data=1;// 友員數據成員 }

// 該類位于Derived.java文件中 public class Derived extends Base{ Base p=new Base();

// 訪問Base類中的friend_data

}

4.16.2

public 成員

不管兩個類是否位于同一個目錄中,一個類總可以訪問另一個類的public成員。

public還可以用于修飾主類,文件名必須與主類名一致。除此之外,其它3個修飾符都不能用于修飾類,只能修飾成員。例如: public class Base{

public int friend_data=1;// public成員 } void dataUse(){

System.out.println(“data=”+p.friend_data);

} point p=new point(1,1);circle c;c=p;

//注意:此處編譯時出錯

c=(circle)p;//注意:此處運行時出錯 System.out.println(c.area());

public class Derived extends Base{ public Base p=new Base();

public void dataUse(){

}

4.16.3

private成員

private成員的特性:除了其所在類能夠訪問該成員以外,其它類都不能訪問它。

在多人合作開發一個系統的過程中,private可以讓你自由使用自己定義的成員,無須擔心與其他人寫的類相沖突。例如: // 程序4-20 class Base{

private Base(){ }

public class testPrivate {

public static void main(String args[ ]){

// Base p=new Base();

// 編譯有錯

}

}

Base p = Base.makeBase();} // 注意

}

System.out.println(“data=”+p.friend_data);} static Base makeBase(){ return new Base();

4.16.4

protected成員

protected與繼承有關,這種類型的成員可以被子類訪問。

同一個包內的非子類,也可以訪問這種類型的成員。即:protected天生就具有友元權限,例如:

// 程序4-21 class Base{

// 該類位于Base.java文件中

int friend_data=1;

// 友元成員

public int public_data=2;

// public成員

private int private_data=3;// private成員

protected int protected_data=4;// protected成員 }

class Derived extends Base{ // Derived.java文件

Base a=new Base();void dataUse(){

} System.out.println(a.friend_data);System.out.println(a.public_data);// System.out.println(a.private_data);System.out.println(a.protected_data);} // 將主類存放在testData.java文件中 public class testData {

public static void main(String args[ ]){

} Derived d=new Derived();d.dataUse();

} 訪問權限總結

課堂練習:

1、定義一個Student類:

該類的功能有:可以保存、修改和獲取學生的姓名、學號等。可以設置學生的英語成績、數學成績、Java成績,并能計算平均分、最高分和最低分。

2、以下代碼定義了一個類,請指出其中三條不合法的代碼行(行號參見注釋)。

class Test22{

//1

//7

} static float fac1(boolean f){ return f?u:v;}

//8 float fac2(boolean f){ return f?u:v;}

//9 float u;

//2 static float v;

//3 static void setUV(boolean f){

//4 u=fac1(f);

//5 v=fac2(!f);

//6 }

課外練習(作業):

P87 1、3、4、6

第5章

接口和包

教學目的要求

? 掌握接口的定義和使用

? 了解接口與抽象類的異同點 ? 掌握包的定義和使用 主要內容

? 接口的定義和使用 ? 包的定義和使用 重點內容

? 接口的定義和使用 ? 包的定義和使用

難點內容

無 1課時 課時分配 教學方法

講授法、演示法 講授內容提要

5.1

接口

引入接口的原因:在程序設計中經常遇到這樣一個問題:有些類互不相關,但卻具有相似的方法。并且這些方法在各個類中的實現互不相同。我們不能為這些類定義一個共同的父類,但又希望在程序中體現出它們共同的接口。

5.1.1

接口的定義和應用

接口是一系列常量和空方法的集合,它提供了多個類共同的方法,但不限制每個類如何實現這些方法。

Java允許一個類同時實現多個接口,相當于實現多繼承的功能。聲明一個接口的語法格式:

[public] interface interfaceName [extends super-interface-List]{

type ConstantName=value;

type MethodName(Parameter lists);} 例如:

interface

Sortable{ // 定義一個接口

int Compare(Sortable

s);} 接口中不能聲明任何變量和構造方法。

如果一個類實現多個接口,應該在接口名之間用逗號隔開。

當一個類實現接口時,必須實現接口中給出的空方法,若實現接口的類是一個抽象類,可以把實現接口的任務交給子類去實現。例如: // 程序5-1 interface

Sortable{

// 定義一個接口

int Compare(Sortable

s);} class Sort{

// 定義一個排序類,僅有一個靜態的方法

public static void SelectSort(Sortable a[ ]){ int i, j, k;Sortable

temp;

for(i=0;i

// 選擇排序

k=i;

for(j=i+1;j

if(a[k].Compare(a[j])<0)k=j;

temp=a[i];a[i]=a[k];a[k]=temp;}

} } class Student implements Sortable{

// 定義一個學生類

private int score;

Student(int x){score=x;}

// 實現接口Sortable中的方法 public int Compare(Sortable s){

Student st=(Student)s;

// 類型強制轉換

return score-st.score;}

public String toString(){ return “score=”+score;} } class Rectangle implements Sortable{ // 矩形類也實現了接口

} public class interfaceTest {

public static void main(String args[ ]){ Student stud[ ]=new Student[20];int i;private int length,width;

Rectangle(int x,int y){ length=x;width=y;}

int area(){return length*width;}

public int Compare(Sortable s){

// 實現接口

}

public String toString(){ return “area=”+area();} Rectangle rec=(Rectangle)s;

// 類型強制轉換 return

area()-rec.area();

for(i=0;i

stud[i]=new Student((int)(Math.random()*100));Sort.SelectSort(stud);

// 排序 for(i=0;i

System.out.println(stud[i].toString());Rectangle R[ ]=new Rectangle[10];for(i=0;i

R[i]=newRectangle((int)(Math.random()*10),(int)(Math.random()*10));Sort.SelectSort(R);

// 排序 for(i=0;i

System.out.println(R[i].toString());

} } 接口中定義的變量實際上是常量,必須給出它們的初始值,實現接口的類可以自由引用這些常量。例如: // 程序5-2的部分 interface constant {

int int int int

EXCELLENT=5;

GOOD=4;

PASS=3;

FAIL=2;} 在類中實現接口中方法時,方法的特征必須和接口中聲明的方法特征保持一致;

實現方法時必須在方法前加上public;

若一個類沒有對接口中的方法具體實現,那么必須將該類聲明為abstract類。例如: interface inter {

// 接口

} void methodA();

abstract class Derived1 implements inter {

// 此處不需要寫出methodA()的原型 }

class Derived2 extends Derived1{

public void methodA(){ // 實現方法

} } System.out.println(“Hi,methodA”);5.1.2

接口和抽象類的異同點 接口和抽象類的相同點:

(1)都有空的方法,都必須在子類中實現這些方法。

(2)都不能用new關鍵字來創建這兩種類型的對象。

(3)都可以具有繼承關系。

(4)接口和類一樣可以具有public屬性。接口和抽象類的不同點:

(1)在抽象類中,空的方法必須加abstract關鍵字,而在接口中不需要。

(2)在抽象類中,除空的方法外,可以定義實例變量和非空的方法,而在接口中,只能定義常量和空的方法。

(3)接口允許多繼承,類僅支持單繼承。

5.2

在Java中可以將自己寫的類,按一定的方法歸屬于不同的子目錄中(包)。

在缺省情況下,Java將所有的類歸屬一個缺省包中。在不同的包中可以有同名的類存在。

Java中的包與C++中的名字空間相似。

5.2.1

package語句

package語句告訴編譯器當前類屬于哪個包。如果沒有package語句,類就存放在無名的缺省包中(即當前目錄中)。

引進包的概念主要是為了名字沖突。

格式: package pkgl[.pkg2[.pkg3]];

5.2.2

import語句

import語句位于package語句之后,類的定義之前;格式:import package1[.package2].(class-name | *);

采用*號不影響程序的運行性能,但會影響編譯速度。指明具體類比引入整個包更為合理。5.2.3

包應用舉例

package Base;

// 將該類存放在d:myjavaBase包中 public class Base { int friend_data=1;// 友元成員

public int public_data=2;// public成員

private int private_data=3;// private成員 protected int protected_data=4;// protected成員

} package Derived;

// 將Base類存放在Derived包中

import Base.*;

// 需要使用Base包中的類

public class Derived extends Base{ Base a=new Base();

// 為了讓testData類能調用該方法,修改為public

// 不能訪問 public void dataUse(){

// System.out.println(a.friend_data);

System.out.println(a.public_data);

// System.out.println(a.private_data);

// 不能訪問

// System.out.println(a.protected_data);// 不能訪問

} }

// testData.java文件的內容如下:

import Derived.*;

//需要使用Derived包中的類

// 該類位于工作目錄,不需要package語句 public class testData { public static void main(String args[ ]){

}

} Derived d=new Derived();

d.dataUse();

課堂練習:

課外練習(作業):

P108

3~6

第6章

字符串處理

教學目的要求

? 掌握字符串的分類;

? 掌握內容不可改變的字符串類String; ? 掌握字符串常量;

? 掌握內容可以改變的字符串類StringBuffer; ? 掌握字符串應用。

主要內容

? 字符串的分類;

? ? ? ? 內容不可改變的字符串類String; 字符串常量;

內容可以改變的字符串類StringBuffer; 字符串應用。

重點內容

? 掌握內容不可改變的字符串類String;

? 掌握內容可以改變的字符串類StringBuffer; ? 掌握字符串應用。

難點內容

String和StringBuffer的區別和聯系 課時分配

2課時 教學方法

講授法、演示法、對比法、實驗驗證法 講授內容提要

6.1

字符串的分類

java.lang包中定義了 String和StringBuffer兩個類;

在運行中值不會改變的字符串,用String類存儲;值會改變的字符串用StringBuffer類來存儲。

兩個類都有final修飾,這樣可以優化字符串的操作。

6.2

String類

String類的定義原型 :

public final class java.lang.String

extends java.lang.Object

{

} 6.2.1

字符串常量

字符串常量屬于String類型;相同的字符串常量屬于同一個對象,占用同一塊空間,例如: // 程序6-1 public class TestConstString{

public static void main(String args[ ]){

}

} String str1=“Hello”, str2=“Hello”;

System.out.println(str1==str2);System.out.println(“Java”==“Java”);6.2.2

創建String類對象

用new運算符,并調用構造函數創建這種類型的對象,常見構造函數如下:

1.public String()采用該構造函數創建一個不含字符的空對象。例如:

String str =new String();

2.public String(char value[ ])

將字符數組的內容轉換為字符串,并賦予新建的對象。例如:

char a[ ]={'J','a','v','a'};String str=new String(a);3.public String(char value[ ], int offset, int count)

例如:char a[ ]={'J','a','v','a'};

String str=new String(a,1,2);

// 字符串str的內容是“av”

4.public String(String value)

采用value對象的值構造一個新的string對象。

例如: String str1=“Java”;String str2=new String(“Java”);

System.out.println(str2);

System.out.println(str1==str2);

5.public String(StringBuffer Buffer)注意采用字符串常量初始化一個String引用的問題。例如: String str = “abc”;相當于:

char data[ ] = {'a', 'b', 'c'};String str = new String(data);應用舉例,注意程序6-2的輸出結果: public class TestString{

// 程序6-2

public static void main(String args[ ]){

String s1=“Java”, s2=“Java”;String s3=new String(s1);

System.out.println(“ s1==s2 is ”+(s1==s2));System.out.println(“ s1==s3 is ”+(s1==s3));s1=“ABC”;s2=“DEFG”;System.out.println(“ s1==s2 is ”+(s1==s2));s1=s2;

System.out.println(“ s1==s2 is ”+(s1==s2));} } 6.2.3

String類常用方法 1.public int

length():

求串長。例如:

String str=“Java” ;

System.out.println(str.length());2.public char charAt(int

index)

提取指定位置上的字符。

3.public int compareTo(String

anotherString)

對字符串內容按字典序進行大小比較。例如: public class SortStringArrary{

// 程序6-3

public static void main(String args[ ]){

String str,s[ ]={“Computer”,“CHINA”,“world”,“U.S.A”};

int i,j,k;

System.out.print(“排序之前:”);for(i=0;i

System.out.print(“t”+s[i]);for(i=0;i

for(k=i,j=i+1;j

if(s[k].compareTo(s[j])>0)

k=j;

str=s[i];

s[i]=s[k];

s[k]=str;// 注意該行的含義 } System.out.print(“n排序之后:”);for(i=0;i

System.out.print(“t”+s[i]);

} } 4.char[ ]

toCharArray()

將String對象轉換到一個字符數組中,例如:

String s=“Hello,Java!”;

char a[ ];

a=s.toCharArray();

for(int i=6;i

System.out.print(a[i]);5.public boolean equals(String anString)

比較兩個字符串對象的內容是否相等。

6.public boolean equalsIgnoreCase(String anotherString)

以忽略大小寫方式,比較兩個字符串對象的內容是否相等。

注意:equals()方法與“==” 之間的區別。例如: public class ConfuseQuestion{

// 程序6-5

public static void main(String args[ ]){

String

s1=“java”;

String

s2=new String(s1);

String

s3=s2;

} } System.out.println(s1.equals(s2));System.out.println(s2.equals(s3));System.out.println(s2==s3);System.out.println(s2.equals(s3));7.public int indexOf(int ch / String str)

在字符串中搜索字符或子串,返回字符或子串在String對象中從左邊起首次出現的位置。如果沒有出現,返回-1。

8.public String substring(int begin, int end)

提取string對象中從begin開始,到end-1結束的子串,返回提取的子串。

9.public String concat(String str)將str對象接到調用對象的后面,返回新串。例如:

String

s1=“Hello ” , s2=“Java” , s3;s3=s1.concat(s2);

System.out.println(s3);注意:如果參數str為空(null),則concat方法不創建新串,而僅僅返回當前串,10.public String replace(char oldChar, char newChar)

將String對象中所有的oldChar字符替換為newChar,返回替換后的新串。例如:

String path=“d:/myjava/documents”;

System.out.println(path.replace('/' , ''));

public String toString()

返回當前字符串對象本身。

12.public static String valueOf(各種類型

f)

將各種數據類型轉換成一個相應的字符串表示,該方法是一個static方法。

程序6-6演示了valueOf()方法的應用。

程序6-7自學。

public class TestValueOf{

// 程序6-6

public static void main(String args[ ]){

char a[ ]={'A','B','C','D','E','F'};

int i=123456;float f=3.14159f;boolean b=true;Object

o=null;System.out.println(String.valueOf(a));System.out.println(String.valueOf(a,2,3));System.out.println(String.valueOf(i));System.out.println(String.valueOf(f));System.out.println(String.valueOf(b));

System.out.println(String.valueOf(o));} } 6.2.4 Java應用程序的命令行參數

應用程序可以通過main方法的String數組,訪問由解釋器傳遞的命令行參數。例如: public class ShowMainArguments{ //程序6-8

public static void main(String args[ ]){

for(int i = 0;i < args.length;i++)

System.out.println(args[ i ]);

} } 6.3

StringBuffer類

StringBuffer類對象是一個內容可以改變的字符串。可以減少由于少量字符的插人而引起的空間分配問題。

StringBuffer類的原型:

public final class java.lang.StringBuffer

extends java.lang.Object { …

} StringBuffer類對象有一塊緩沖區,字符串被存放在緩沖區中,緩沖區的大小可以隨程序的需要進行調整。緩沖區的大小稱為對象的容量。

當修改對象的內容時,只要StringBuffer對象包含的字符個數沒有超出容量,就不會分配新的空間,而直接在原空間內進行修改。若字符的個數超出了容量,該對象會自動調整其容量,從而適應新的存儲。

6.3.1

創建StringBuffer類對象

StringBuffer類的構造函數有三種方式:

1.public StringBuffer()創建一個內容為空的StringBuffer對象,容量為16。

例如:StringBuffer s=new StringBuffer();2.public StringBuffer(int length)初始內容為空,容量為length指定的大小。注意:length應大于等于0,不能為負數,否則會產生異常。例如:

StringBuffer s2=new StringBuffer(2);3.public StringBuffer(String str)

初始內容和參數str的內容相同,容量為參數str的長度加上16。例如: String s1=“Java”;

StringBuffer s2=new StringBuffer(s1);則s2的容量是20,內容是“Java”。

6.3.2

StringBuffer類常用方法

1.public int length()

返回字符串的長度

2.public int capacity()

返回緩沖區大小

3.public void setLength(int newLength)

指定對象的長度,將對象的內容進行裁減。如果參數小于對象的長度,則將對象截斷;如果參數大于等于對象的長度,則填充空字符('u0')擴充新增加的部分。

4.public void ensureCapacity(int NewCapacity)

設定對象的緩沖區的大小,若參數 小于對象的容量,則新的設置將不起作用,也就是說容量只能擴大而不能縮小。

程序6-9演示了這幾個方法的具體應用。

public class TestCapacity{

// 程序6-9

public static void main(String args[ ]){ String

s=“Java”;

StringBuffer

str=new StringBuffer(s);System.out.println(“Length=”+str.length());System.out.println(“Capacity=”+str.capacity());str.setLength(8);

// 設置長度為8 str.ensureCapacity(80);// 設置容量為80 System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity());

str.setLength(3);

str.ensureCapacity(20);System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity());

} } 5.public void setCharAt(int index, char ch)

將參數index指定位置上的字符,設置成參數ch

指定的字符。例如:

StringBuffer str=new StringBuffer(“Hello,Java”);

str.setCharAt(3,'L');

則str的內容變成了“HelLo,Java” 6.public StringBuffer append(多種數據類型)

將其它類型的數據添加到StringBuffer對象的尾部,返回修改后的StringBuffer對象。

例如:StringBuffer s1,s2=new StringBuffer();

s1=s2;// s1和s2代表同一個對象

s2.append(3.14).append(' ').append(“Java”);

System.out.println(s1==s2);

// 輸出true

System.out.println(s1);

// 輸出3.14 Java

7.public String toString()

該方法把StringBuffer對象的內容復制到一個新的String類對象中,返回這個新的String類對象。例如程序6-10。

public class BufferToString{

// 程序6-10

public static void main(String args[ ]){ String s1;StringBuffer s2=new StringBuffer(“Hello ”);s1=s2.append(“Java!”).toString();System.out.println(“s1=”+s1+“"+”s2=“+s2);

} }

8.public StringBuffer insert(int offset, 多種類型

b)該方法是將一個其它類型的對象b插入到offset指定的位置。例如: StringBuffer str=new StringBuffer(” Java!“);

// 將字符串”Hello“插入到下標為0的位置

str.insert(0,”Hello“);

System.out.println(”str= “+str);輸出結果為: str= Hello Java!

6.4

應用舉例

課堂練習:

無 課外練習(作業):

P119 2、3、4

第7章

異常處理

教學目的要求

? 了解異常的層次結構;

? 掌握異常處理語句; ? 了解自定義異常;

? 了解異常處理中常用的調試方法。主要內容

? ? ? ? 異常的層次結構;

異常處理語句; 自定義異常;

異常處理中常用的調試方法。

重點內容

? 異常處理語句;

難點內容

課時分配

1課時 教學方法

講授法、演示法、對比法、實驗驗證法 講授內容提要

7.1

異常的層次結構

Throwable是異常類的根節點,定義在java.lang包,它的子類也定義在該包中; Error代表系統錯誤類,由系統直接處理;

Exception類及其子類是在程序中可捕捉到的異常。見圖7.1

Throwable Error achineError … AW TError LinkageError VirtualM RuntimeException ArithmeticException ArrayIndexO utO fBoundsException … Interrupted Exception AWTException IOException Exception FileNotFoundException… EOFException

1.java.lang.ArithmeticException

0作除數(包括模),將產生這類異常。例如:int x=0 , y;

y=100/x;

2.java.lang.ArrayIndexOutOfBoundsException

例如:int a[ ]=new int[10];

a[10]=0;

3.java.lang.ArrayStoreException 例如:int a[ ]=new int[10];

boolean b[ ]=new boolean[10];

System.arraycopy(a,0,b,3,6);//有異常

4.java.lang.ClassCastException 例如: Object obj=new Object();

int a[ ]=(int[ ])(obj);

5.java.lang.IndexOutOfBoundsException

例如:char ch=”ABC“.charAt(99);

注意: 2 是5的子類。

6.java.lang.NegativeArraySizeException

例如: int a[ ]=new int[-10];

7.java.lang.NullPointerException 例如:int a[ ]=null;

System.out.print(a.length);7.2

異常處理語句

缺省的異常處理的情況,例如:

public class DefaultException{

// 程序7-1

public static void main(String args[ ]){ int a,b=0;

a=2/b;

// 此處有異常

System.out.println(“a=”+a);// 不運行此行

} }

異常處理語句有try、catch、finally、throw和throws。異常處理的形式為:

try{

程序執行體

}catch(異常類型1

異常對象1){ 異常處理程序體1 }catch(異常類型2

異常對象2){

異常處理程序體2 }finally {

異常處理結束前的執行程序體 }

7.2.1

try和catch語句

try語句指明可能產生異常的代碼段;catch語句在try語句之后,用于捕捉異常,一個try語句可以有多個catch語句與之匹配。異常處理以后,程序從try語句代碼段后繼續執行。例如:程序7-2。public class TryCatchTest{

// 程序7-2

public static void main(String args[ ]){ int a=99,b=0,c;

try{ System.out.println(”產生異常之前“);c=a/b;

// 該行有異常 System.out.println(”產生異常之后“);}catch(ArrayIndexOutOfBoundsException e){

System.out.println(”處理下標越界異常“);}catch(ArithmeticException e){

System.out.println(”處理算術異常“);}

System.out.println(”異常處理結束“);

} }

注意:用catch語句捕捉異常時,若找不到相匹配的catch語句,將執行缺省的異常處理。例如:

int a=99,b=0,c;

try{ c=a/b;//產生的異常和捕捉的異常類型不一致

}catch(ArrayIndexOutOfBoundsException e){

System.out.println(”處理異常“);

}

注意:當有多個catch語句時,系統依照先后順序逐個檢查。例如: try{ c=a/b;

}catch(ArithmeticException e){ System.out.println(”Divided by zero“);}catch(RuntimeException e){

System.out.println(”Divided by zero“);}

7.2.2

finally語句

無論是否產生異常,finally語句指明的代碼一定被執行。例如: public class testFinally{

// 程序7-3

public static void main(String args[ ]){

int a,b=0;

for(int i=0;i<=3;i++){ System.out.println(”Test No: “+(i+1));try{

switch(i){

} case 0:

a=3/b;

break;case 1:

int c[ ]=new int[10];

c[10]=0;

break;case 2:

char ch=”ABC“.charAt(99);

break;case 3:

return;}catch(ArithmeticException e){ System.out.println(“零作除數!”);

}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”數組下標越界!“);}catch(IndexOutOfBoundsException e){ System.out.println(”下標越界!“);}finally{ System.out.println(”在finally塊中!“);

} }

7.2.3

throw語句

throw語句用于指出當前行有異常,當程序執行到throw語句時,流程就轉到相匹配的異常處理語句,所在的方法也不再返回值。

throw語句可以將異常對象提交給調用者,以進行再次處理。例如:程序7-4。public class ThrowException{

// 程序7-4

public static void Test(){

try{ int c[ ]=new int[10];c[10]=0;}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”t 數組下標越界!“);

}

}

throw e;

// 異常拋出點

//System.out.println(“t產生異常后!”);

該行無法通過編譯 }

}

public static void main(String args[ ]){

try{ Test();}catch(IndexOutOfBoundsException e){ System.out.println(”t 下標越界!“);}finally{

System.out.println(”t 在finally塊中!“);}

} }

7.2.4

throws語句

throws語句指明方法中可能要產生的異常類型,由調用者進行異常處理。例如: import java.io.*;

// 程序7-6 public class testThrows {

public static String readString()throws IOException{

int ch;String r=”“;boolean done=false;

while(!done){ ch=System.in.read();

} if(ch<0 || ch==0xd)

done=true;else r = r +(char)ch;

return r;

}

public static void main(String args[ ]){ String str;

try{

str=readString();}catch(IOException e){

System.out.println(”產生了輸出/輸出異常“);

return;}

System.out.println(”整數是:"+Integer.parseInt(str));

} } 建議:在多人合作寫程序時,一個方法中產生的異常,最好在該方法中進行處理,不要將異常傳播給其他人處理。

7.3

自定義異常類

通過繼承Exception類或它的子類,實現自定義異常類;

對于自定義異常,必須采用throw語句拋出異常,這種類型的異常不會自行產生。總體上分為兩步:

第1步:定義異常類。例如: class userException extends Exception{

int n=0;

// 計數器

第四篇:Java程序設計教案

Java程序設計

第一講 緒論

一、安裝netbean系統

二、hello world 典型程序結構中各部分的說明:

/* * To change this template, choose Tools | Templates * and open the template in the editor.*/ package test1;

//@author Jie

public class Test1 {

public static void main(String[] args){

System.out.println(“Hello World!”);

} }

1、注釋語句

2、類定義的包:package

3、public class Test1,定義類,類名稱是Test1,屬性為public

4、public static void main(String[] args),main函數

5、main函數的函數體{

System.out.println(“Hello World!”);

}

三、Java程序設計語言的基本內容: 數據類型 運算符&表達式 3 程序控制語句 4 數組 5 類 6 對象 7 繼承 8 接口 9 包 APPLET 11 異常處理 12 線程 13 字符串 14 GUI 15 輸入輸出系統

我們的課堂教學內容:時間17周,包括17次課堂教學,17次實驗室上機。

四、幾個案例:

1、計算根號2;

2、顯示1-100

3、從1加到100

4、打印一個“*”組成的10*10的矩形

5、求N!,遞歸算法

6、GUI的例子,在GUI界面下輸入和顯示(this.jLabel1.setText(this.jTextField1.getText());)

7、演示幾個復雜一點例子

五、Java語言中保留的關鍵字:

Java語言一共使用了48個保留關鍵字,他們主要可以 分為如下幾類。

1.訪問控制

private , protected , public.2.類、方法和變量修飾符

abstract , class , extends , final , implements , interface, native(用于與其他語言的接口), new , static strictfp:java 語言采用固定的位數來存儲浮點型數據,但是有些處理器使用更高位的浮點寄存器,這些寄存器增加了中間過程的計算精度。例如double類型數據jvm采用64為存儲,二有些處理器使用80位的浮點寄存器來保存中間數據。例如:double w = x*y/z;很多處理器計算x*y后將中間結果存儲在80位的寄存器中,再除以z并將結果截斷為64位;但是這個結果可能會與始終在64位機器上計算的結果不一致,如果將所有的中間結果都截斷,可能會導致溢出,而截斷操作同樣需要時間,計算速度比較慢。

因此JVM默認允許中間結果精度擴展。但是在使用關鍵字strictfp標記的方法,必須使用嚴格的浮點計算。使用strictfp標記的類中所有的方法都必須嚴格按照浮點計算。

synchronized:多線程同步訪問控制

transient:transient 關鍵字表示在Serializable 的時候不保存該值

volatile:Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

3.程序控制語句

break, continue, return, do, while, if, else, for, instanceof, switch, case,default, 4.錯誤處理

catch 捕獲, finally 最后, throw 投試, throws 投試, try 嘗試

5.包相關

import 輸入, package 包.6.基本類型

boolean 布爾型, byte 字節型, char 字符型, double 雙精度, float 浮點, int 整型, long 長整型, short 短整型 7.變量引用

super 特殊, this 這個, void 無值

除了這48個關鍵字以外,還有3個語法保留字:

null 空, true 真, false 假.六、如何學習一門程序設計語言

1、理解什么是程序設計語言

2、練習、練習、再練習

第二講 數據類型、運算符與表達式

一、Java語言中的數據類型

數據類型

大小

范圍

默認值 byte(字節)

-12832768

0 int(整型)

-2147483648-2147483648

0 long(長整型)

-***7808-***7808 0

float(浮點型)

32-3.40292347E+38-3.40292347E+38

0.0f double(雙精度)

-1.797693***E+308-1.797693***E+308

0.0d char(字符型)

? u0000-+=!~ +(一元)-(一元)

左?右

* / %

右?左

+(二元)-(二元)

右?左

<< >> >>>

右?左

< > <= >= instanceof

右?左

= =!=

右?左

&

右?左

^

右?左

|

右?左

&&

右?左

||

右?左

?:

左?右

= *= /= %= += -= <<= >>= >>>= &= ^= |=

左?右

三、實驗課任務

1、熟悉netbeans的工作環境,自己編寫HELLO WORLD程序

2、輸入并運行測試,至少10個不同運算符號組合的算術表達式

3、輸入并運行測試,至少5個不同運算符號組合的邏輯表達式

4、聯系字符串對象的基本用法:聲明賦值對象,顯示對象,兩個字符串連接,截取子串等 第三講 輸入輸出

一、介紹數據流的概念

1、流的基本概念

2、字節流

字節是8比特,等價于0-255范圍的十進制數。字節是計算機中最基本的編碼單位。如字符型是2個字節,浮點型是4個字節。

字符流的頂層包括inputstream和outputstream兩個抽象類。可以通過fileinoutstream和fileoutputstream兩個子類對文件進行輸入和輸出。通過datainputstream和dataoutputstream兩個子類處理整數、浮點數等數據。

3、字符流

字符流是特殊的字節流,專門用于處理字符數據,目前的字符集通常是unicode,16比特,一個字符是兩個字節。

頂層有兩個抽象類:reader和writer,有兩個最主要的方法:read(),write()

4、預定義流

標準輸入流:in 標準輸出流:out 出錯流:err

舉例:

輸出一串字符,在顯示器上顯示出來

二、文件字節流

1、文件字節流的輸入輸出

常用方法:

read(),write(ch)案例1:在顯示器上顯示文本文件的內容。案例2:復制文件

2、文件字節流的隨機訪問

常用方法:

1、讀數據方法:readInt()readBoolean()readLine()

2、寫數據方法:wirteChar()writerDouble()

3、指針控制方法:

long getFilePointer();void seek(long pos);int skipBytes(int n)案例:建立一個可讀寫隨機訪問文件,寫入10個浮點數,然后關閉該文件。再次以讀寫方式打開該文件,修改其中第3個數據,然后關閉該文件。再次以只讀方式打開蓋文件,顯示文件內容,然后關閉該文件。

三、過濾流

過濾流是對輸入輸出流提供了一種包裝。我們主要介紹一組: DataInputStream DataOutputStream 案例:從鍵盤輸入一些同學的信息,將信息保存到文件中。

四、字符流

五、File類

六、對象的串行化 第四講 程序控制語句 第五講 綜合練習第六講 數組

第七講 函數、函數調用、遞歸函數 第八講 綜合練習第九講 類和對象

第十講 繼承、接口和包與異常處理 第十一講 綜合練習第十二講APPLET、GUI 第十三講 線程 第十四講 綜合練習

第十五講 字符串及信息處理的應用 第十七講 綜合練習

第五篇:java培訓-Java程序設計

Java程序設計:圖形與多媒體處理(1)

本文主要介紹了Java的圖形設計以及多媒體處理,源碼作者也做了詳細的注釋,對于初學者應該不難。詳細請看下文

同心圓效果圖:

1./**

2.*程序要求:新建一個600*600像素的應用程序窗口,并在窗口中繪制5個不同顏色的同心圓,3.*所有圓心都是屏幕的中心點,相鄰兩個圓直接的半徑相差50像素

4.*效果圖如下圖所示(顏色隨機設置),源程序保存為Ex7_1.java。

5.*作者:wwj

6.*日期:2012/4/25

7.*功能:顯示一個有5個不同顏色的同心圓

8.**/

9.10.import javax.swing.*;11.import java.awt.*;12.import java.awt.Color;13.public class Ex7_1 extends JFrame 14.{

15.int red,green,blue;16.Color color;17.18.public Ex7_1()19.{

20.super(“一個有5個不同顏色的同心圓”);//顯示窗口名稱

21.setSize(600,600);//設置窗口大小

22.setVisible(true);//設置為可見

23.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置窗口關閉動作

24.25.} 26.27.28.public void paint(Graphics g)29.{

30.//第一個圓

31.red=(int)(Math.random()*255);32.green=(int)(Math.random()*255);33.blue=(int)(Math.random()*255);34.color=new Color(red,green,blue);35.g.setColor(color);

36.g.fillOval(175,175,250,250);37.//第二個圓

38.red=(int)(Math.random()*255);39.green=(int)(Math.random()*255);40.blue=(int)(Math.random()*255);41.color=new Color(red,green,blue);42.g.setColor(color);

43.g.fillOval(200,200,200,200);44.//第三個圓

45.red=(int)(Math.random()*255);46.green=(int)(Math.random()*255);47.blue=(int)(Math.random()*255);48.color=new Color(red,green,blue);49.g.setColor(color);

50.g.fillOval(225,225,150,150);51.//第四個圓

52.red=(int)(Math.random()*255);53.green=(int)(Math.random()*255);54.blue=(int)(Math.random()*255);55.color=new Color(red,green,blue);56.g.setColor(color);

57.g.fillOval(250,250,100,100);58.//第五個圓

59.red=(int)(Math.random()*255);60.green=(int)(Math.random()*255);61.blue=(int)(Math.random()*255);62.color=new Color(red,green,blue);63.g.setColor(color);

64.g.fillOval(275,275,50,50);65.66.} 67.68.public static void main(String[] args)69.{

70.Ex7_1 e = new Ex7_1();71.} 72.73.}

播放音樂和切換圖片的小程序效果圖:

1./** 2.*程序要求:編寫一個Applet的小程序,準備5幅圖片和三個音樂文件,繪制到Applet中,3.*并增加幾個按鈕,控制圖片的切換、放大、縮小和音樂文件的播放。

4.*作者:wwj

5.*日期:2012/4/29

6.*參考:neicole

7.*功能:能進行圖片和歌曲的選擇變換的applet小程序

8.**/

9.10.import javax.swing.*;11.import java.awt.*;12.import java.awt.event.*;13.import java.applet.Applet;14.import java.applet.AudioClip;15.16.17.public class Ex7_2 extends Applet implements ActionListener,ItemListener 18.{ 19.20.//創建兩個面板

21.JPanel p1=new JPanel();22.JPanel p2=new JPanel();23.JPanel p3=new JPanel();24.//聲音對象

25.AudioClip[] sound=new AudioClip[3];26.int playingSong=0;27.//切換圖片的按鈕

28.JButton lastPic=new JButton(“上一張”);29.JButton setLarge=new JButton(“放大”);30.JButton setLittle=new JButton(“縮小”);31.JButton nextPic=new JButton(“下一張”);32.//切換歌曲的按鈕

33.JButton lastSound=new JButton(“上一首”);34.JButton play=new JButton(“播放”);35.JButton loop=new JButton(“連續”);36.JButton stop=new JButton(“停止”);37.JButton nextSound=new JButton(“下一首”);38.//曲目下拉列表

39.JComboBox xx;

40.String names[]={ “曲目1.wav”,“曲目2.wav”,“曲目3.wav”};41.42.//創建畫布對象

43.MyCanvasl showPhotos;44.45.46.47.public void init()48.{

49.//窗口布局

50.this.setLayout(new BorderLayout());51.52.//為圖片控制按鈕注冊監聽器

53.lastPic.addActionListener(this);54.setLarge.addActionListener(this);55.setLittle.addActionListener(this);56.nextPic.addActionListener(this);57.58.//向面板p1添加組件

59.p1.add(lastPic);60.p1.add(setLarge);61.p1.add(setLittle);62.p1.add(nextPic);63.p1.repaint();64.65.//實例化下拉列表對象

66.xx = new JComboBox(names);67.xx.addItemListener(this);68.69.//為控制播放音樂按鈕注冊監聽器

70.lastSound.addActionListener(this);71.play.addActionListener(this);72.loop.addActionListener(this);73.stop.addActionListener(this);74.nextSound.addActionListener(this);75.76.for(int i=0;i<3;i++)77.{

78.sound[i]=getAudioClip(getCodeBase(),“music/”+“曲目”

79.+Integer.toString(i+1)+“.wav”);80.} 81.82.83.84.//向面板p2添加組件

85.p2.add(xx);

86.p2.add(lastSound);87.p2.add(play);88.p2.add(loop);89.p2.add(stop);90.p2.add(nextSound);91.p2.repaint();92.93.showPhotos = new MyCanvasl();94.p3.add(showPhotos);95.p3.repaint();96.97.//把面板p1和p2分別布置到窗口的北部和南部

98.add(p1,BorderLayout.NORTH);99.add(p2,BorderLayout.SOUTH);100.add(p3,BorderLayout.CENTER);101.102.this.repaint();103.104.} 105.106.107.//按鈕的事件處理

108.public void actionPerformed(ActionEvent e)109.{ 110.111.112.if(e.getSource()== lastPic){

113.showPhotos.changePhotoShow('P');114.}

115.else if(e.getSource()== nextPic){ 116.showPhotos.changePhotoShow('N');117.}

118.else if(e.getSource()== setLarge){ 119.showPhotos.changePhotoSize('B');120.}

121.else if(e.getSource()== setLittle){ 122.showPhotos.changePhotoSize('S');123.} 124.125.else if(e.getSource()==lastSound){ //上一首

126.sound[playingSong].stop();127.playingSong=(playingSong-1+3)%3;128.xx.setSelectedIndex(playingSong);129.sound[playingSong].play();130.131.}

132.else if(e.getSource()==play){ //按下播放按鈕

133.sound[playingSong].play();134.}

135.else if(e.getSource()==loop){ //按下循環按鈕

136.sound[playingSong].loop();137.}

138.else if(e.getSource()==stop){ //按下停止按鈕

139.sound[playingSong].stop();140.}

141.else{ //下一首

142.sound[playingSong].stop();143.playingSong=(playingSong+1)%3;144.xx.setSelectedIndex(playingSong);145.sound[playingSong].play();146.147.} 148.} 149.150.151.//下拉列表的事件處理

152.public void itemStateChanged(ItemEvent e)153.{ 154.155.sound[playingSong].stop();

156.sound[playingSong]=getAudioClip(getCodeBase(),“music/”+xx.getSelectedItem());157.} 158.159.class MyCanvasl extends Canvas 160.{ 161.162.public Image[] img=new Image[5];163.164.int MaxWidth = 600;165.int MaxHeight = 500;166.int nowImageIndex = 0;167.int coordinateX = 0;168.int coordinateY = 0;

169.int currentWidth = MaxWidth;170.int currentHeight = MaxHeight;171.172.173.MyCanvasl(){

174.setSize(MaxWidth,MaxHeight);175.//獲取當前目錄下的圖片

176.for(int i=0;i<5;i++){

177.img[i]=getImage(getCodeBase(),“image/”+Integer.toString(i+1)+“.jpg”);178.} 179.} 180.181.182.private void changePhotoIndex(int index){ 183.nowImageIndex = index;184.changePhotoSize('M');185.} 186.187.188.189.public void changePhotoShow(char command){ 190.if('P' == command){

191.changePhotoIndex((nowImageIndex + 5100))&&(0 <(currentHeight100;214.currentHeight = currentHeightcurrentWidth)/ 2;218.coordinateY =(MaxHeight-currentHeight)/ 2;219.repaint();220.}

221.//paint方法用來在窗口顯示圖片

222.public void paint(Graphics g){

223.g.drawImage(img[nowImageIndex],coordinateX,coordinateY,currentWidth,currentHeight,this);224.225.} 226.} 227.}

原文鏈接:http:/zretc.com

下載Java程序設計課堂練習題課案(共5則范文)word格式文檔
下載Java程序設計課堂練習題課案(共5則范文).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    java程序設計教案(★)

    課程教案 (理論教學) 課程名稱: Java程序設計 課程類型:( 2 )1、必修;2、選修;3、其它 授課對象: 專業(本科) 級 班 授課時間: 至 學年第 學期 計劃學時: 學時(其中:理論 ,實驗: ) 任課教師......

    Java程序設計報告

    楚雄師范學院 2015年春季期末Java程序設計報告 項目名稱:基于Java平臺開發的五子棋程序設計 學 院: 物理與電子科學學院 專 業:電子信息科學與技術 班 級:2 0 1 3 級 電 信 一......

    java程序設計[優秀范文5篇]

    import java.awt.*; import java.awt.event.*; import javax.swing.*; class CardText extends JFrame implementsActionListener { JButton btn=new JButton[6]; CardLay......

    Java程序設計課程教案

    Java使用教材: 程序設計課程教案(普通版) Java程序設計教程,雍俊海主編,清華大學出版社,2007,國家十一五規劃教材 主要參考書: 《Java語言程序設計》,郎波,清華大學出版社,2005年5月......

    《Java程序設計》課程總結.

    《Java程序設計》總評成績分析及課程總結 1、學期授課計劃是否符合教學大綱要求 符合。 2、教學內容及進度是否與學期授課計劃有出入,是何原因 無出入,完成規定的學習內容。......

    《JAVA程序設計》課程設計五篇

    JAVA程序設計》課程設計 ------ Chatter即時聊天工具 班 級: 姓 名: 學 號: 指導老師: 日 期: 1 《目錄 1.引言... ..............................................................

    Java程序設計實驗2

    學 生 實 驗 報 告 冊 課程名稱: 學生學號: 所屬院部: (理工類) 專業班級: 學生姓名: 指導教師: 20 ——20 學年 第 學期 金陵科技學院教務處制 實驗報告書寫要求 實驗報告......

    Java程序設計實驗報告[合集五篇]

    Java程序設計實驗報告 實驗一 實驗題目:從鍵盤上讀入10個字符串存入數組a中,然后輸出這10個字符串中最大字符串和最小字符串。 實驗代碼: public class StrPro { public stati......

主站蜘蛛池模板: 亚洲精品中国国产嫩草影院美女| 精品亚洲a∨无码一区二区三区| 国产老熟女狂叫对白| 污污污污污污www网站免费| 久久九色综合九色99伊人| 日本久久综合久久鬼色| 国产成人精品日本亚洲18| 国产精品国产三级国产专i| 西西大胆午夜人体视频| 河北真实伦对白精彩脏话| 免费人成无码大片在线观看| 专干老熟女视频在线观看| 男ji大巴进入女人的视频小说| 十八禁无码免费网站| 亚洲精品字幕| 性色av闺蜜一区二区三区| 中文有码亚洲制服av片| 成在人线无码aⅴ免费视频| 成 人 免 费 黄 色| 久久精品国产99精品国产2021| 国产美女被遭高潮免费网站| 精品无码av| 精品国产一区二区三区不卡在线| 国产精品186在线观看在线播放| 亚洲国产精品嫩草影院久久| 精品人伦一区二区三电影| 免费99精品国产人妻自在现线| 成人免费无码大片a毛片软件| 人人爽人人模人人人爽人人爱| 国产av毛片亚洲含羞草社| 久久精品国产亚洲av高清漫画| 精品国产三级a在线观看网站| 中文字幕在线亚洲日韩6页| 亚洲人av高清无码| 免费99精品国产人妻自在现线| 成人无码视频在线观看大全| 亚洲av成人噜噜无码网站| 伊人久久大香线蕉av不变影院| 国产男女猛烈无遮挡免费视频| 国产精品毛片完整版视频| 无码国产一区二区免费|