第一篇: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(i
//文件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+“頁