版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章一、簡答題1.Java語言有哪些特點?主要用于開發(fā)哪些方面的軟件?有7個特點:(1)面向?qū)ο?,?)平臺無關(guān)性,(3)分布式,(4)可靠性和安全性,(5)多線程,(6)健壯性,(7)靈活性。2.Java有哪些版本,各用于什么場合?有3個版本。(1)JavaSE:主要用于桌面應用軟件的編程。(2)JavaEE:用于企業(yè)級軟件開發(fā)。(3)JavaME:用于嵌入式系統(tǒng)和電子產(chǎn)品的軟件開發(fā)。3.什么是Java虛擬機?簡述其工作機制。JVM是JavaVirtualMachine(Java虛擬機)的縮寫,是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。Java虛擬機主要由字節(jié)碼指令集、寄存器、棧、垃圾回收堆和存儲方法域等構(gòu)成。JVM屏蔽了與具體操作系統(tǒng)平臺相關(guān)的信息,使Java程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。JVM在執(zhí)行字節(jié)碼時,實際上最終還是把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。JVM是一種抽象機器,它附著在具體操作系統(tǒng)之上,本身具有一套虛機器指令,并有自己的棧、寄存器組等,在JVM上有一個Java解釋器用來解釋Java編譯器編譯后的程序。Java編程人員在編寫完軟件后,通過Java編譯器將Java源程序編譯為JVM的字節(jié)代碼,任何一臺機器只要配備了Java解釋器,就可以運行這個程序。4.什么是JDK?它與Java有什么關(guān)系?jdk是Java開發(fā)工具集,是對java基礎(chǔ)環(huán)境和相應開發(fā)平臺標準和工具包的封裝。JDK是整個JAVA的核心,包括了Java運行環(huán)境JRE(JavaRuntimeEnvirnment)、一堆Java工具(javac/java/jdb等)和Java基礎(chǔ)的類庫(即JavaAPI包括rt.jar)。二、操作題publicclassMyJavaProgram{publicstaticvoidmain(Stringargs[]){System.out.println("這是我第一次使用Java!");}}第2章一、簡答題1.運行Java程序需要哪些軟件?至少需要2個軟件:(1)JDK。(2)開發(fā)平臺,如Eclipse、MyEclipse、Jcreate、IntelliJIDEA等。2.JDK與Eclipse有什么關(guān)系?JDK是Java軟件開發(fā)工具包,是整個java開發(fā)的核心,它包含了JAVA的運行環(huán)境JRE和JVM。Eclipse是一個集成開發(fā)平臺,其運行依賴于jdk和jre。3.Java程序分為哪幾類?有什么區(qū)別?主要是2類:(1)Application,即Java應用程序,是可以獨立運行的Java程序,由Java解釋器控制執(zhí)行,也是最常見的類型。(2)Applet,即Java小程序,不能獨立運行,需嵌入到Web頁,由Java兼容瀏覽器控制執(zhí)行。4.如何在Eclipse環(huán)境下運行Java程序?搭建Java開發(fā)環(huán)境,安裝JDK,配置環(huán)境變量,并安裝eclipse,搭建完成打開并建Java項目,點擊File——New——JavaProject,輸入需要創(chuàng)建的項目名,創(chuàng)建完成后點擊功能下面src文件夾。點擊New——Class,在對話框輸入類名,注意名稱要與項目名稱一致,點擊完成編寫代碼,保存源文件,點擊“執(zhí)行”按鈕,即可運行。。二、操作題3.依照本章例題,自己分別編寫一個Application和Applet,功能是輸出以下信息并在Eclipse環(huán)境下運行。IloveJava!應用程序:publicclassILoveJava{publicstaticvoidmain(Stringargs[]){System.out.println("IloveJava!");}}小程序:importjava.awt.*;importjava.applet.*;publicclassHelloWorldAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString("IloveJava!",20,20);}}第3章一、簡答題1.面向?qū)ο笏枷胗心男┗咎卣鳎棵嫦驅(qū)ο?大基本特征:抽象、封裝、繼承、多態(tài)。2.面向?qū)ο笏枷氚男┗疽??面向?qū)ο蟮娜齻€基本要素:抽象、封裝、共享。3.面向?qū)ο缶幊绦枰男┎襟E?9個步驟:(1)分析確定在問題空間和解空間出現(xiàn)的全部對象及其屬性;(2)確定施加于每個對象的操作,即對象固有的處理能力;(3)分析對象間的聯(lián)系,確定對象彼此間傳遞的消息;(4)設(shè)計對象的消息模式,消息模式和處理能力共同構(gòu)成對象的外部特性;(5)分析各個對象的外部特性,將具有相同外部特性的對象歸為一類,從而確定所需要的類;(6)確定類間的繼承關(guān)系,將各對象的公共性質(zhì)放在較上層的類中描述,通過繼承來共享對公共性質(zhì)的描述;(7)設(shè)計每個類關(guān)于對象外部特性的描述;(8)設(shè)計每個類的內(nèi)部實現(xiàn)(數(shù)據(jù)結(jié)構(gòu)和方法);(9)創(chuàng)建所需的對象(類的實例),實現(xiàn)對象間的聯(lián)系(發(fā)送消息)。4.什么是類?類由哪些成分構(gòu)成?類是對一組具有相同特征的對象的抽象描述,所有這些對象都是這個類的實例。在Java語言中,類是一種數(shù)據(jù)類型,而對象是該類型的變量,變量名即是某個具體對象的標識名,即對象名。類由屬性和方法構(gòu)成。5.解釋以下概念:類,對象,繼承,封裝,抽象類表示具有相同特征屬性的對象的集合,具有相同的特征。它給出了可以從它創(chuàng)建的對象的藍圖或描述。創(chuàng)建一個對象作為一個類的成員被稱為實例化。因此,對象是一個類的一個實例。繼承是允許新的類通過擴展和完善它的能力而產(chǎn)生新類的機制?,F(xiàn)有的類稱為父類,而新的類稱為子類。子類可以繼承父類的屬性和方法,子類可以添加自己的屬性和方法,并可以修改任何父類方法。繼承定義了一個“是一個”關(guān)系。封裝是在一個類中綁定屬性和方法的過程。通過封裝,一個類的內(nèi)部細節(jié)可以被隱藏從外部。它允許類的元素只能通過類提供的接口訪問外部。抽象用來表征對問題領(lǐng)域進行分析、設(shè)計中得出的抽象概念,是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象;抽象類是不完整的,它只能用作基類,在面向?qū)ο蠓椒ㄖ校橄箢愔饕脕磉M行類型隱藏和充當全局變量的角色。二、操作題1.定義一個類Person,并設(shè)置若干成員變量和成員方法。//人類classPerson{ Stringname;//姓名 intage;//年齡 charsex;//性別 voidprintInfo(){ System.out.println("姓名:"+name+",年齡:"+age+",性別:"+sex); }}2.定義一個類Teacher,并設(shè)置若干成員變量和成員方法,分析Teacher和Person的關(guān)系。//教師類classTeacher{ Stringname;//姓名 intage;//年齡 charsex;//性別 Stringmajor;//專業(yè) StringprofessionalTitle;//職稱 voidprintInfo(){ System.out.println("姓名:"+name+",年齡:"+age+",性別:"+sex+",專業(yè):"+major+",職稱:"+professionalTitle); }}Teacher和Person的關(guān)系是:Teacher是Person的子類。第4章一、簡答題1.Java提供了哪些數(shù)據(jù)類型,全部寫出來。整型:byte,short,int,long數(shù)值型浮點型:float,double基本數(shù)據(jù)類型字符型:char數(shù)據(jù)類型布爾型:boolean類:class復合數(shù)據(jù)類型字符串:String接口:interface2.如何進行數(shù)據(jù)類型的轉(zhuǎn)換?有2種方式:自動類型轉(zhuǎn)換:運算時,不同類型的數(shù)據(jù)先轉(zhuǎn)換成同一類型后再參與運算,轉(zhuǎn)換的原則是位數(shù)少的類型轉(zhuǎn)換成位數(shù)多的類型,由系統(tǒng)自動處理。強制類型轉(zhuǎn)換:當位數(shù)多的類型向位數(shù)少的類型進行轉(zhuǎn)換時,需要用戶明確說明要轉(zhuǎn)換的類型,需要用戶在程序中指明。3.類的修飾符有哪些?有什么區(qū)別?類的修飾符包括訪問控制修飾符、靜態(tài)修飾符static、最終說明符final。訪問控制修飾符包括4種類型:privat、default、protected、public。用static聲明的成員變量被視為類的成員變量,而不能當成實例對象的成員變量,也就是說,靜態(tài)變量是類固有的,可以被直接引用,而其它成員變量聲明后,只有生成對象時才能被引用。4.public的類和abstract的類有什么不一樣?public的類是公共類,可以被繼續(xù),可以實例化,可以被其他包訪問。abstract的類是抽象類,其中一定含有抽象方法,abstractclass的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現(xiàn),也可以通過再次聲明其方法為抽象的方式,無需實現(xiàn),留給其子類來實現(xiàn),但此類必須也聲明為抽象類。5.什么是最終類?如何聲明?最終類不能被繼承,也沒有子類。final類中的方法默認是final的。final方法不能被子類的方法覆蓋,但可以被繼承。final成員變量表示常量,只能被賦值一次,賦值后值不再改變。聲明方法:finalclassClassName。二、操作題1.創(chuàng)建一個學生類Student,包括學號no、姓名name、年齡age、性別sex四個屬性以及學習study、實踐practice兩個方法。publicclassStudent{ privateStringno; privateStringname; privateintage; privatecharsex; publicvoidstudy(){ System.out.println(name+"正在學習"); } publicvoidpractice(){ System.out.println("學號為"+no+"的學生參與了實踐"); }}2.分別創(chuàng)建一個普通類、抽象類和最終類,類名均為Student。//普通類StudentclassStudent{ privateStringno; privateStringname; privatevoidstudy(){ System.out.println("好好學習,天天向上!"); }}//抽象類Student,我需要被繼承abstractclassStudent{ publicabstractvoidstudy();}//最終類Student,我不能被繼承finalclassStudent{ privateStringno; privateStringname; publicvoidprintStudent(){ System.out.println("學號:"+no+",姓名:"+name); } publicvoidstudy(){ System.out.println("學無止境!"); }}第5章一、簡答題1.Java提供了哪些注釋語句,功能有什么不同?Java提供了3種形式的注釋:(1)//一行的注釋內(nèi)容(2)/*一行或多行的注釋內(nèi)容*/(3)/**文檔注釋內(nèi)容*/2.識別下面標識符,哪些是合法的,哪些是非法的。Ply_1,$32,java,myMothod,While,your-list,class,ourFriendGroup_$110,長度,7st合法:Ply_1,$32,java,myMothod,While,ourFriendGroup_$110,長度不合法:your-list,class,7st3.程序有哪3種控制結(jié)構(gòu)?共3種:順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)4.Java中提供了哪些循環(huán)控制語句?共3種:while循環(huán),dowhile循環(huán),for循環(huán)5.數(shù)組有什么特點,數(shù)組的聲明和初始化方法與簡單變量有什么不同?數(shù)組是有序數(shù)據(jù)的集合,數(shù)組中的每個元素具有相同的類型,數(shù)組名用下標來區(qū)分數(shù)組中的元素位置。數(shù)據(jù)聲明為某種數(shù)據(jù)類型,表示數(shù)據(jù)的每個元素均為這種類型,數(shù)據(jù)的初始化表示對數(shù)據(jù)的每一個元素賦值。6.Java編碼規(guī)范有哪些?包(Package):包名采用完整的英文描述符,都由小寫字母組成。類(Class):類名采用完整的英文描述符,所有單詞的第一個字母均大寫。接口(Interface):接口名采用完整的英文描述符說明接口封裝,所有單詞的第一個字母大寫。組件(Component):使用完整的英文描述來說明組件的用途,末端應接上組件類型。異常(Exception):通常采用字母e表示異常的實例,這是個特例,表示單詞Exception的第一個字母,易于記憶。變量、屬性、方法:采用完整的英文描述,第一個字母小寫,后面所有單詞的首字母大寫。獲取成員函數(shù):被訪問字段名的前面加上前綴get。布爾型的獲取成員函數(shù):所有的布爾型獲取函數(shù)必須用單詞is做前綴,表示“是不是……”這樣一個意義。設(shè)置成員函數(shù):被訪問字段名的前面加上前綴set表示設(shè)置。普通成員函數(shù):采用完整的英文描述說明成員函數(shù)功能,第一個單詞盡可能采用一個生動的動詞,第一個字母小寫,類似于變量名。靜態(tài)常量(staticfinal):全部采用大寫字母,單詞之間用下劃線分隔。循環(huán)變量:用于循環(huán)語句中控制循環(huán)次數(shù),通常用i,j,k或者counter表示。7.什么是方法的覆蓋?什么是方法的重載?類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,則稱子類中的方法覆蓋了父類中的方法。通過子類引用覆蓋方法時,總是引用子類定義的方法,而父類中定義的方法被隱藏。方法的重載是Java實現(xiàn)面向?qū)ο蟮亩鄳B(tài)性機制的另一種方式。在同一個類中有二個或二個以上的方法可以有相同的名字,只要它們的參數(shù)聲明不同即可,這種情況稱為方法重載。二、操作題1.編寫一個類,其方法是:從10個數(shù)中求出最大值、最小值及平均值。publicclassProgram5_1{ publicvoidgetMaxMinAvg(double[]array){ doublemax=array[0]; doublemin=array[0]; doublesum=array[0]; for(inti=1;i<10;i++){ if(array[i]>max) max=array[i]; if(array[i]<min) min=array[i]; sum+=array[i]; } System.out.println("最大值:"+max+",最小值:"+min+",平均值:"+sum/10); }}2.編寫一個類,其方法是:編程求n!的值,設(shè)n=8。publicclassProgram5_2{ publicintfactorial(intn){ intproduct=1; for(inti=2;i<=n;i++){ product*=i; } returnproduct; }}3.編寫一個類,其方法是:根據(jù)考試成績的等級打印出分數(shù)段,優(yōu)秀為90以上,良好為80~90,中等為70~79,及格為60~69,60以下為不及格,要求采用switch語句。publicclassProgram5_3{ publicvoidgrade(intscore){ if(score>100||score<0){ System.out.println("您的成績有誤!"); return; } switch(score/10){ case10: case9: System.out.println("優(yōu)秀!"); break; case8: System.out.println("良好!"); break; case7: System.out.println("中等!"); break; case6: System.out.println("及格!"); break; default: System.out.println("不及格!"); break; } }}4.編寫一個類,其方法是:判斷一個數(shù)是不是回文?;匚氖且环N從前向后讀和從后向前讀都一樣的文字或者數(shù)字,例如,12321、569878965、abcba。publicclassProgram5_4{ publicvoidpalindrome(Stringstr){ booleanflag=true; for(inti=0;i<str.length()/2;i++){ if(str.charAt(i)!=str.charAt(str.length()-1-i)) { flag=false; break; } } if(flag){ System.out.println(str+"是回文"); } else{ System.out.println(str+"不是回文"); } }}5.編寫一個類,其方法是:將數(shù)組中元素的值按從大到小輸出。publicclassProgram_5_5{ publicvoidsort(double[]array){ double[]newArray=newdouble[array.length]; for(inti=0;i<array.length;i++){ newArray[i]=array[i]; } for(inti=0;i<newArray.length-1;i++){ for(intj=0;j<newArray.length-i-1;j++){ if(newArray[j]<newArray[j+1]){ doubletemp=newArray[j]; newArray[j]=newArray[j+1]; newArray[j+1]=temp; } } } for(inti=0;i<newArray.length;i++){ System.out.print(newArray[i]+"\t"); } }}6.編寫一個類,其方法是:編程輸出楊輝三角形的前6行。publicclassProgram5_6{ publicvoidtriangle(){ int[][]arr=newint[6][]; for(inti=0;i<6;i++){ arr[i]=newint[i+1]; } for(inti=0;i<arr.length;i++){ for(intj=0;j<arr[i].length;j++){ if(j==0||i==j) arr[i][j]=1; else arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } } for(inti=0;i<arr.length;i++){ for(intk=i;k<arr.length-1;k++){ System.out.print("\t"); } for(intj=0;j<arr[i].length;j++){ System.out.print(arr[i][j]+"\t\t"); } System.out.println(); } }}第6章一、簡答題1.什么是類的實例化?在面向?qū)ο蟮木幊讨?,通常把用類?chuàng)建對象的過程稱為實例化,即用類創(chuàng)建對象的過程。2.有哪幾種方法?類的初始化就是對象的初始化,創(chuàng)建對象的方法:使用New關(guān)鍵字、使用Class類的newInstance方法、使用Constructor類的newInstance方法、使用Clone方法、使用反序列化。最常見的通過new命令初始化。3.如何引用一個對象?類的成員(包括成員屬性和成員方法)必須要在產(chǎn)生對象即實例化后才能被引用,引用的方法是:對象名.成員。4.普通數(shù)據(jù)類型參數(shù)和引用數(shù)據(jù)類型在方法中的傳遞有什么不同?如果變量是基本數(shù)據(jù)類型(包括字符串和數(shù)組),則按值傳遞,即方法調(diào)用前后變量的值不變;如果變量的類型是類或者接口,即引用數(shù)據(jù)類型,則按地址傳遞,變量的值在方法調(diào)用后會發(fā)生改變。5.什么是構(gòu)造方法?構(gòu)造方法有什么特點?構(gòu)造方法是包含在類中的一種特殊方法,在類實例化時它會被自動調(diào)用,其參數(shù)在實例化命令中指定。構(gòu)造方法的特征:具有與類相同的名稱,不含返回類型,不能在方法中用return語句返回一個值,在類實例化時,由系統(tǒng)自動調(diào)用。6.在一個類中,如果幾個構(gòu)造方法同名,則參數(shù)不能相同。參數(shù)指的是什么?指參數(shù)的類型、個數(shù)、順序不能都相同。二、操作題1.定義一個日期類,包括年、月、日三個屬性和一個方法,用于判斷是不是閏年。然后實例化兩個對象:今天和明天,并分別給它們賦值。publicclassDate{ intyear; intmonth; intday; publicbooleanleapYear(){ if(year%4==0&&year%100!=0||year%400==0) returntrue; else returnfalse; } publicstaticvoidmain(String[]args){ Datetoday=newDate(); today.year=2024; today.month=2; today.day=23; Datetomorrow=newDate(); tomorrow.year=2024; tomorrow.month=2; tomorrow.day=24; }}2.編寫一個程序?qū)崿F(xiàn)構(gòu)造方法的重載。publicclassStudent{ privateStringno; privateStringname; privateintage; publicStudent(){ } publicStudent(Stringno,Stringname,intage){ this.no=no; =name; this.age=age; } }3.編寫一個類BankCard,表示銀行卡,屬性自定,給它建立一個構(gòu)造方法,功能是在實例化時,輸出信息“您的卡上余額是:××××”。publicclassBankCard{ Stringno; Stringname; doublebalance; publicBankCard(){ System.out.println("您的卡上余額是:"+balance); } }第7章一、簡答題1.什么是包?包中包括一些什么內(nèi)容?包也稱類庫,可以理解為文件夾,用于解決類的命名沖突問題。包由下級包和類組成。2.如果有一個包pag1,它的子包是pag2,如果需要將這兩個包都引入程序,至少需要使用幾條import語句?2條,分別是:importpag1;importpag2;3.接口與類有什么不同?與抽象方法存在什么樣的關(guān)系?接口是一種特殊的類,也是一種特殊的抽象類,接口中所有方法全部是抽象方法。接口不能直接實例化,必須要實現(xiàn)所有抽象方法后才能實例化。4.Java提供了哪些系統(tǒng)類庫?各起什么作用?Java提供了很多類庫,即包,主要包括:java.lang包,java.io包,java.applet包,java.awt包,包,java.math包,java.util包,java.SQL包,javax.swing包等。5.Java的基類是什么?它提供了哪些主要方法?java.lang包中的類Object是Java中所有類的基礎(chǔ)類,不需要用import語句引入,每個程序運行時,系統(tǒng)都會自動引入java.lang包。提供了基本數(shù)據(jù)類型及輸入輸出等方法6.字符串類有哪兩種?各有什么特點?String類和StringBuffer類。String類用于比較兩個字符串、查找串中的字符及子串、字符串與其它類型的轉(zhuǎn)換,String類對象的內(nèi)容初始化后不能改變。StringBuffer類用于內(nèi)容可以改變的字符串,可將其它類型的數(shù)據(jù)增加、插入到字符串中,也可翻轉(zhuǎn)字符串的的內(nèi)容,字符串是一種特殊形式的數(shù)組。7.JDK幫助系統(tǒng)有哪幾種?分別說明它們的使用特點。JDK幫助文件提供了三種使用方法:第一種是在線查詢,通過Oracle官網(wǎng)的APISpecification(API規(guī)范)頁面查詢,只支持英文。第二種是下載網(wǎng)頁格式的幫助文檔,其啟動文件是index.html。第三種是下載chm格式的幫助文檔。8.設(shè)置cha="JavaApplication",下面結(jié)果是什么?cha.length(),cha.concat("Applet"),cha.substring(3,8)cha.replace('a','A')15,JavaApplicationApplet,aAppli,JAVAApplicAtion二、編程題1.定義一個日期類,包括年、月、日三個屬性和一個方法,用于判斷是不是閏年。然后實例化兩個對象:今天和明天,并分別給它們賦值。publicclassDate{ intyear; intmonth; intday; publicbooleanleapYear(){ if(year%4==0&&year%100!=0||year%400==0) returntrue; else returnfalse; } publicstaticvoidmain(String[]args){ Datetoday=newDate(); today.year=2024; today.month=2; today.day=23; Datetomorrow=newDate(); tomorrow.year=2024; tomorrow.month=2; tomorrow.day=24; }}2.設(shè)定一個含有大小寫字母的字符串,先將所有的大寫字母輸出,再將所有的小寫字母輸出。publicclassProgram7_2{ publicvoidprint(Stringstr){ char[]ch=str.toCharArray(); for(inti=0;i<ch.length;i++){ if(ch[i]>='A'&&ch[i]<='Z') System.out.print(ch[i]+""); } for(inti=0;i<ch.length;i++){ if(ch[i]>='a'&&ch[i]<='z') System.out.print(ch[i]+""); } }}3.設(shè)定6個字符串,打印出以字母“a”開頭的字符串。publicclassProgram7_3{ publicstaticvoidprintA(String[]arr){ for(inti=0;i<arr.length;i++){ if(arr[i].charAt(0)=='a') System.out.println(arr[i]); } }}第8章一、簡答題1.實現(xiàn)類的繼承是通過哪個關(guān)鍵字實現(xiàn)的?使用extends和implements這兩個關(guān)鍵字來實現(xiàn)繼承,而且所有的類都是繼承于java.lang.Object,當一個類沒有繼承的兩個關(guān)鍵字,則默認繼承object(這個類在java.lang包中,所以不需要import祖先類。在Java中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以extends只能繼承一個類。2.Java能實現(xiàn)多繼承關(guān)系嗎?如何解決這個問題?在Java中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以extends只能繼承一個類。使用implements關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時繼承多個接口,接口跟接口之間采用逗號分隔。3.如果父類和子類同時提供了同名方法,在類實例化后,調(diào)用的是哪個類的方法?采用什么辦法避免混淆?子類。通過super與this關(guān)鍵字區(qū)別父類和子類。super關(guān)鍵字:我們可以通過super關(guān)鍵字來實現(xiàn)對父類成員的訪問,用來引用當前對象的父類。this關(guān)鍵字:指向自己的引用,表示當前正在調(diào)用此方法的對象引用。4.什么是抽象類?抽象類和普通類有什么不同?抽象類是指類中含有抽象方法的類,抽象類和普通類區(qū)別是:1、和普通類比較起來,抽象類它不可以被實例化,這個區(qū)別還是非常明顯的。2、抽象類能夠有構(gòu)造函數(shù),被繼承的時候,子類就一定要繼承父類的一個構(gòu)造方法,但是,抽象方法不可以被聲明成靜態(tài)。3、在抽象類當中,可以允許普通方法有主體,抽象方法只需要申明,不需要實現(xiàn)。4、含有抽象方法的類,必須要申明為抽象類。5、抽象的子類必須要實現(xiàn)抽象類當中的所有抽象方法,否則的話,這個子類也是抽象類。6、抽象類它一定要有abstract關(guān)鍵詞修飾。二、操作題1.定義一個銀行卡的類BankCard作為父類,成員屬性和成員方法根據(jù)實際情況自行確定,然后分別定義萬事達卡Master類和維薩卡Visa類作為BankCard的子類,實現(xiàn)它們之間的繼承關(guān)系。classBankCard{ privateStringno; privateStringname; privatedoublebalance; publicBankCard(){ } publicBankCard(Stringno,Stringname,doublebalance){ this.no=no; =name; this.balance=balance; } publicStringgetNo(){ returnno; } publicvoidsetNo(Stringno){ this.no=no; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicdoublegetBalance(){ returnbalance; } publicvoidsetBalance(doublebalance){ this.balance=balance; } }classMasterextendsBankCard{ privateStringaddress; publicMaster(){ } publicMaster(Stringno,Stringname,doublebalance,Stringaddress){ super(no,name,balance); this.address=address; } publicStringgetAddress(){ returnaddress; } publicvoidsetAddress(Stringaddress){ this.address=address; }}classVisaextendsBankCard{ privateStringidCard; publicVisa(){ } publicVisa(Stringno,Stringname,doublebalance,StringidCard){ super(no,name,balance); this.idCard=idCard; } publicStringgetIdCard(){ returnidCard; } publicvoidsetIdCard(StringidCard){ this.idCard=idCard; } }2.定義一個表示學習方法的抽象類StudyMethod,其中包括3個抽象方法,分別是學習英語English、學習語文Chinese和學習計算機Computer,寫出此抽象方法的代碼。publicabstractclassStudyMethod{ publicabstractvoidstudyEnglish(); publicabstractvoidstudyChinese(); publicabstractvoidstudyComputer();}第9章一、簡答題1.什么是接口?接口與類有什么不同?接口是由常量和抽象方法組成的特殊類。一個類只能由一個父類,但是它可以同時實現(xiàn)若干個接口。這種情況下如果把接口理解成特殊的類,那么這個類利用接口實際上就獲得了多個父類,即實現(xiàn)了多重繼承。與類定義相仿,聲明接口時也需要給出訪問控制符,不同的是接口的訪問控制符只有public一個。用public修飾的接口是公共接口,可以被所有的類和接口使用,而沒有public修飾符的接口則只能被同一個包中的其他類和接口利用。接口也具有繼承性。定義一個接口是可以通過extends關(guān)鍵字聲明該新接口是某個已經(jīng)存在的父接口的派生接口,它將繼承父接口的所有屬性和方法。與類的繼承不同的是一個接口可以有一個以上的父接口,它們之間用逗號分隔,形成父接口列表。新接口將繼承所有父接口中的屬性和方法。2.接口的修飾符包括哪些?接口的修飾符只有:public。接口中的方法會加上publicabstract或者publicstaticfinal。3.接口與抽象類有什么不同?1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。2、抽象類要被子類繼承,接口要被類實現(xiàn)。3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現(xiàn)4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。5、抽象類里的抽象方法必須全部被子類所實現(xiàn),如果子類不能全部實現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個實現(xiàn)接口的時候,如不能全部實現(xiàn)接口方法,那么該類也只能為抽象類。6、抽象方法只能申明,不能實現(xiàn),接口是設(shè)計的結(jié)果,抽象類是重構(gòu)的結(jié)果。7、抽象類里可以沒有抽象方法。如果一個類里有抽象方法,那么這個類只能是抽象類。4.如何實現(xiàn)多個接口?類雖然只能繼承一個父類(抽象類或其他類),但可以通過implements實現(xiàn)多個接口。如:classClassNameextendsSuperClassNameimplementsInterfaceName1,InterfaceName2二、操作題1.定義一個銀行卡的接口BankCard,成員屬性根據(jù)實際情況自行確定,在類中定義兩個方法save和withdraw,分別表示存款和取款。interfaceBankCard{ publicvoidsave(doublemoney); publicvoidwithdraw(doublemoney);}2.根據(jù)上一題設(shè)計的接口,分別實現(xiàn)從銀行取款1000元和存款5000元對應的抽象方法,要求輸出賬戶余額和存(取)款的數(shù)量。publicclassBankCardImplimplementsBankCard{ privateStringno; privateStringname; privatedoublebalance; publicBankCardImpl(){ } publicBankCardImpl(Stringno,Stringname,doublebalance){ this.no=no; =name; this.balance=balance; } publicStringgetNo(){ returnno; } publicvoidsetNo(Stringno){ this.no=no; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicdoublegetBalance(){ returnbalance; } publicvoidsetBalance(doublebalance){ this.balance=balance; } publicvoidsave(doublemoney){ balance+=money; System.out.println("您的存款金額為"+money+"元"+",您的余額為"+balance+"元"); } publicvoidwithdraw(doublemoney){ if(balance>=money){ balance-=money; System.out.println("您的取款金額為"+money+"元"+",您的余額為"+balance+"元"); } else{ System.out.println("您的取款金額為"+money+"元"+",您的余額為"+balance+"元"); System.out.println("您的余額不足,請重新輸入取款金額!"); } }}第10章一、簡答題1.什么是多態(tài)?類的多態(tài)是怎么實現(xiàn)的?多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”,在面向?qū)ο笳Z言中,接口的多種不同的實現(xiàn)方式即為多態(tài)。多態(tài)表示不同的對象可以執(zhí)行相同的動作,但要通過它們自己的實現(xiàn)代碼來執(zhí)行。多態(tài)通過重載和覆蓋實現(xiàn),重載發(fā)生在一個類中,覆蓋發(fā)生在子類,子類重寫父類相同名稱的方法。2.創(chuàng)建多態(tài)需要哪些條件?
在代碼中實現(xiàn)Java的多態(tài)必須遵循的必要條件:存在子類繼承父類關(guān)系(包括接口的實現(xiàn))、子類覆蓋父類中的方法,在實現(xiàn)多態(tài),需有子類對父類方法的覆蓋(重寫)。3.類是怎么向接口轉(zhuǎn)型實現(xiàn)多態(tài)的?定義一個父類類型的引用指向一個子類的對象既可以使用子類強大的功能,又可以抽取父類的共性。所以,父類類型的引用可以調(diào)用父類中定義的所有屬性和方法,而對于子類中定義而父類中沒有的方法,它是無可奈何的;同時,父類中的一個方法只有在在父類中定義而在子類中沒有重寫的情況下,才可以被父類類型的引用調(diào)用;對于父類中定義的方法,如果子類中重寫了該方法,那么父類類型的引用將會調(diào)用子類中的這個方法,這就是動態(tài)連接。二、操作題1.定義交通工具的抽象類Vehicle,包括方法run,然后定義三個子類Car(汽車)、Ship(船)和Plane(飛機),分別實現(xiàn)Vehicle的run方法。abstractclassVehicle{ publicabstractvoidrun();}classCarextendsVehicle{ @Override publicvoidrun(){ System.out.println("汽車在馬路上飛馳!"); } }classShipextendsVehicle{ @Override publicvoidrun(){ System.out.println("輪船在大海里航行!"); } }classPlaneextendsVehicle{ @Override publicvoidrun(){ System.out.println("飛機在天空中翱翔!"); }}2.參考例10-2,應用Vehicle類與Car(汽車)、Ship(船)和Plane(飛機)類實現(xiàn)多態(tài)。publicclassTest{ publicstaticvoidmain(String[]args){ Vehiclev1=newCar(); v1.run(); Vehiclev2=newShip(); v2.run(); Vehiclev3=newPlane(); v3.run(); }}3.運行例10-3,分析在主類中應用多態(tài)的過程。MainBoardmb=newMainBoard();//創(chuàng)建一個MainBoard類的對象mbmb.run();//輸出mainboardrunmb.usePCI(null);//將null賦值給PCI接口的對象p,接下來判斷p是否為null,如果為null,則什么都不做mb.usePCI(newNetCard());//創(chuàng)建一個NetCard類(NetCard類實現(xiàn)了PCI接口)的對象,并將該對象賦值給PCI接口的對象p,然后執(zhí)行接口中的open和close方法,實際上執(zhí)行的是子類NetCard中的open和close方法。第11章一、簡答題1.什么是異常?異常產(chǎn)生的原因有哪些?程序員編寫程序時,難免會出現(xiàn)一些問題,導致運行時會出現(xiàn)一些非正常的現(xiàn)象,其中非致命性錯誤稱為異常。產(chǎn)生的原因有以下3種情況:(1)JVM檢測到非正常的執(zhí)行狀態(tài),這些狀態(tài)可能由以下情況引起的:表達式違反了Java語言的語義,裝入或鏈接程序時出錯,超出了資源限制,如內(nèi)存不足,這種異常是程序員無法預知的。(2)程序代碼中的throws語句被執(zhí)行。(3)因為代碼段不同步而產(chǎn)生,可能的原因是:Thread(線程)的stop方法被調(diào)用,JVM內(nèi)部發(fā)生錯誤。2.為什么Java的異常處理技術(shù)優(yōu)于傳統(tǒng)程序的異常處理技術(shù)?在沒有異常處理機制的程序設(shè)計語言中進行異常處理,通常是在程序設(shè)計中使用if-else或switch-case語句所能設(shè)想的到的錯誤情況,以捕捉程序中可能發(fā)生的錯誤。在這種處理方式的程序中,對異常的監(jiān)視、報告和處理的代碼與程序中完成正常功能的代碼交織在一起,即在完成正常功能的程序的許多地方插入了與處理異常有關(guān)的程序塊。這種處理方式雖然在異常發(fā)生點可以看到程序如何處理異常,但它干擾了人們對程序正常功能的理解,使程序的可讀性和可維護性下降,并且由于人的思維限制,常常會遺漏一些意想不到的異常。Java的異常處理機制是在程序中監(jiān)視可能發(fā)生異常的程序塊,將一個程序中的所有異常收集起來放到程序的某一段中處理,而不必在被監(jiān)視的程序塊中多處插入處理異常的代碼,使完成功能的程序代碼與進行異常處理的程序代碼分開,增強了程序的可讀性和可靠性,減少了編程人員的工作量,增加了程序的靈活性。此外,這種機制可以及時有效地處理程序運行中的異常,可以預防因錯誤的程序代碼或系統(tǒng)錯誤所造成的不可預期的結(jié)果發(fā)生,并且當這些不可預期的錯誤發(fā)生時,異常處理機制會嘗試恢復異常發(fā)生前的狀態(tài)或?qū)@些錯誤結(jié)果做一些善后處理。3.在Java代碼中可用來處理異常的方式有哪些?(1)在可能產(chǎn)生異常的方法中,采用Java語言提供的try-catch-finally語句塊處理異常。(2)如果一個方法可能生成某種異常,但是并不能確定如何處理這種異常,則此方法應聲明拋棄該種異常,表明該方法將不對此類異常進行處理,而由該方法的調(diào)用者負責處理。此時需在方法聲明中包含throws子句。4.如果發(fā)生了一個異常,但沒有找到適當?shù)漠惓L幚沓绦?,則會發(fā)生什么情況?如果發(fā)生了一個異常,但沒有找到適當?shù)漠惓L幚沓绦?,則Java系統(tǒng)會采用Java異常處理機制預設(shè)處理方法來處理異常,即一旦程序發(fā)生異常,程序就會被終止并顯示相應的錯誤信息給用戶。5.說明throw與throws有什么不同?throw與throws的不同之處在于:throw語句是一個獨立的語句,用來明確地拋出一個異常,其作用是改變程序的執(zhí)行流程,使程序跳到相應的異常處理語句中執(zhí)行。而throws語句總是和方法定義結(jié)合起來用,在有些情況下,不需要一個方法處理本身可能產(chǎn)生的異常,而是希望把異常向上移交給調(diào)用這個方法的方法來處理,就需要通過throws語句來實現(xiàn)。6.在設(shè)計catch塊處理不同的異常時,一般應注意哪些問題?應注意如下的問題:(1)catch塊中的語句應根據(jù)異常的不同執(zhí)行不同的操作,比較通用的操作是打印異常的相關(guān)信息,包括異常名稱、產(chǎn)生異常的方法名等。(2)由于異常對象與catch塊的匹配是按catch塊的先后排列順序進行的,所以在處理多異常進應注意認真設(shè)計各catch塊的排列順序。一般地,處理較具體和較常見的異常的catch塊應放在前面,而可以與多種異常相匹配的catch塊應放在較后的位置。二、編程題1.編寫一個程序,用來將作為命令行參數(shù)輸入的值轉(zhuǎn)換為數(shù)字,如果輸入的值無法轉(zhuǎn)換為數(shù)字,則程序應顯示相應的錯誤消息,要求通過異常處理方法解決。publicclassProgram11_1{ publicstaticvoidmain(String[]args){ try{ doublenum=Double.parseDouble(args[0]); System.out.println(num); }catch(NumberFormatExceptione){ System.out.println(e); } }}2.編寫一個程序,用于將來自用戶的兩個數(shù)字接收為命令行參數(shù)。將第一個數(shù)字除以第二個數(shù)字并顯示結(jié)果。代碼應當處理引發(fā)的異常,即在輸入的參數(shù)數(shù)量不是兩個或用戶輸入0作為參數(shù)時引發(fā)異常。publicclassProgram11_2{ publicstaticvoidmain(String[]args){ try{ intnum1=Integer.parseInt(args[0]); intnum2=Integer.parseInt(args[1]); System.out.println(num1/num2); } catch(ArrayIndexOutOfBoundsExceptione1){ System.out.println("命令行參數(shù)少于兩個!"); }catch(NumberFormatExceptione2){ System.out.println("命令行參數(shù)不能轉(zhuǎn)換成數(shù)字!"); }catch(ArithmeticExceptione3){ System.out.println("除零異常!"); } }}3.編寫一個程序,說明在一個catch處理程序中引發(fā)一個異常時會發(fā)生什么情況。publicclassProgram11_3{ publicstaticvoidmain(String[]args){ int[]arr={1,0}; try{ intnum=arr[0]/arr[1]; }catch(ArithmeticExceptione){ System.out.println("除零異常!"); System.out.println(arr[2]); } System.out.println("程序正常結(jié)束!"); }}上述程序在catch處理程序中引發(fā)一個數(shù)組越界異常java.lang.ArrayIndexOutOfBoundsException,程序異常結(jié)束,異常之后的代碼System.out.println("程序正常結(jié)束!");不能運行。4.編寫一個可演示用戶自定義異常用法的程序,該程序接收用戶輸入的學生人數(shù),當輸入一個負數(shù)時,認為是非法的。用戶自定義異常捕獲此錯誤。importjava.util.Scanner;classCustomExceptionextendsException{ publicCustomException(Stringmessage){super(message);}}publicclassProgram11_4{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); System.out.print("請輸入學生人數(shù):"); intnum=sc.nextInt(); try{ if(num<0){ thrownewCustomException("學生人數(shù)不能為負數(shù)!"); } }catch(CustomExceptione){ System.out.println("錯誤信息為:"+e.getMessage()); } }}第12章一、簡答題1.什么是AWT?什么是Swing?兩者有什么區(qū)別?答:AWT是AbstractWindowToolkit幾個單詞的縮寫,其中文含義是抽象窗口工具包,AWT是Java的第一個GUI框架,AWT是JDK1.0與JDK1.1版本下提供的GUI開發(fā)工具包,包含60多個組件類、接口及其方法,可用于創(chuàng)建基于窗口或Applet的GUI應用。Swing是一個用于開發(fā)Java應用程序用戶界面的開發(fā)工具包,swing以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺應用程序可以使用任何可插拔的外觀風格。Swing開發(fā)人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來創(chuàng)建優(yōu)雅的用戶界面。兩者的區(qū)別:AWT是java圖形用戶界面GUI開發(fā)的基礎(chǔ)框架,Swing是以AWT作為基礎(chǔ)的第二代GUI開發(fā)框架。Swing相對于AWT具有以下優(yōu)勢:Swing組件完全由純Java語言實現(xiàn),沒有本地代碼,不依賴于具體平臺的支持,功能更強大,具有更好的平臺無關(guān)性。Swing程序中可以指定GUI組件的LookandFeel,真正做到與平臺無關(guān)。Swing組件提供了許多AWT組件無法實現(xiàn)的功能,如Swing組件可以顯示圖像與圖標,支持邊框、標題及tooltips等。Swing除具有與AWT原有組件類似的組件外,還增加了一個豐富的高層組件集合,集合中集成了諸如表格(JTable)、樹(JTree)等組件。2.布局管理器的作用是什么?Java提供了哪幾種布局管理?分別有什么特點?答:布局管理器是執(zhí)行布局管理的特殊對象,它確定容器中的組件是如何組織和管理的,即通過布局管理器來實現(xiàn)控制組件在容器控件中的排列順序和位置。Java提供了多種布局管理器:(1)FlowLayout(流布局管理器)流布局管理器以控件加入到容器的次序,按行一個接一個地放置控件,當該布局管理器的控件到達此JFrame框架的右邊界時,它自動開始在下一行放置控件。(2)GridLayout(網(wǎng)格布局管理器)網(wǎng)格布局是流布局管理器的擴展,網(wǎng)格布局把面板劃分為矩形格子,然后網(wǎng)格布局把創(chuàng)建的組件放入每一個格子,從左到右,從上自下地放置。網(wǎng)格布局與流布局不同的是它按指定的列數(shù)自動換行。網(wǎng)格布局管理器和流布局管理器的另一個區(qū)別是其組件占満容器所分配的整個區(qū)域,當窗口大小改變時,組件大小也隨著改變。在默認狀態(tài)下,GridLayout管理器使控件對準每一矩形的中心。(3)BorderLayout(邊界布局管理器)BorderLayout將容器分為東、南、西、北、中5個區(qū)域,按照上北下南左西右東的格局分布,各用一個方位單詞表示,注意第一個字母是大寫:東:East、南:South、西:West、北:North、中:Center。放置組件時,必須從這5種方向中選擇其一以靠近窗口的邊界,BorderLayout最多放置5個組件,當少于5個時,沒有放置組件的區(qū)域被相鄰區(qū)域占用。(4)GridBagLayout網(wǎng)格袋布局管理器GridBagLayout布局管理器是java.awt包中提供的最靈活、最復雜的布局管理器。它類似于網(wǎng)格布局(GridLayout),GridBagLayout布局管理器把組件組織成長方形網(wǎng)格,使用這種布局,可靈活地把組件放在長方形網(wǎng)格的任何行和列中,它也允許特定的組件跨多行或多列。(5)CardLayout(卡片布局管理器)CardLayout卡片布局管理器是采用卡片式的管理方法,可存儲幾個不同的布局,每個布局就像是一個卡片組中的一張卡片,在一個給定的時間總會且只有一張卡片在頂層,其它卡片看不到。當需要許多面板切換,而每個面板需要顯示為不同布局時,可以使用卡片布局。3.容器有哪些作用?Swing有哪些容器類控件?分別有什么特點?答:容器自身首先也是一種組件,具有其他組件的共同特性;其次容器是一種特殊的組件,其特殊性在于容器的功能是用來容納一般的組件對象與容器組件對象的。Swing中定義了以下幾種窗口控件:(1)JFrame窗體JFrame窗體是一個容器,它是Swing程序中各個組件的載體,可以將JFrame看作是承載著血Swing組件的容器。在開發(fā)應用程序時,可以通過繼承java.swing.JFrame類創(chuàng)建一個窗體。在這個窗體中添加組件,同時為組件設(shè)置事件。(2)JDialog對話框JDialog窗體的功能是從另外一個窗體中彈出另外一個窗體,JDialog窗體實質(zhì)上就是另一種類型的窗體,它與JFrame窗體類似,在使用時也需要調(diào)用getCOntentPane()方法將窗體轉(zhuǎn)換成容器,然后在容器中設(shè)置窗體的特性。(3)JPanel面板JPanel是Java圖形用戶界面(GUI)工具包swing中的面板容器類,包含在javax.swing包中,是一種輕量級容器,可以加入到JFrame窗體中。JPanel默認的布局管理器是FlowLayout,其自身可以嵌套組合。4.設(shè)計一個菜單系統(tǒng)的步驟有哪些?答:設(shè)計一個菜單一般要經(jīng)過以下幾個步驟:(1)使用JMenuBar類創(chuàng)建菜單欄。(2)使用JMenu類創(chuàng)建主菜單項。(3)使用JMenuItem類創(chuàng)建菜單項和子菜單項。(4)通過使用JCheckBoxMenuItem等類設(shè)置菜單項的一些屬性。(5)實現(xiàn)菜單項的事件處理。二、編程題1.編寫代碼,創(chuàng)建標題為“基本GUI編程”的窗口。importjavax.swing.JFrame;publicclassMyJFrameextendsJFrame{ publicMyJFrame(){ this.setSize(400,200); this.setTitle("基本GUI編程"); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } publicstaticvoidmain(String[]args){ MyJFramejFrame=newMyJFrame(); }}2.編寫代碼,創(chuàng)建標題為“使用面板的基本GUI編程”的面板。importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassMyJPanelextendsJFrame{ publicMyJPanel(){ this.setSize(400,200); JPaneljp=newJPanel(); this.add(jp); this.setVisible(true); this.setTitle("使用面板的基本GUI編程"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } publicstaticvoidmain(String[]args){ MyJPaneljp=newMyJPanel(); }}第13章一、簡答題1.什么是事件?事件處理包括哪些因素?答:Java對事件的處理采用授權(quán)的事件模型,也成為委托事件模型。在授權(quán)事件模型中,事件是一個描述事件源狀態(tài)改變的對象。通過鼠標、鍵盤與GUI直接或間接交互都會產(chǎn)生事件,按回車鍵、單擊按鈕、在一個下拉列表中選擇一個選項等操作。程序有時需對發(fā)生的事件作出反應來實現(xiàn)特定的任務。事件處理主要包括:事件、事件源和監(jiān)聽器(事件處理者)。事件是由事件源產(chǎn)生,事件源可以是GUI組件、JavaBen或由生成事件能力的對象。事件發(fā)生后,組件本身并不處理,需要交給監(jiān)聽器(另外一個類)來處理。實際上監(jiān)聽器也可稱為事件處理者。監(jiān)聽器對象屬于一個類的實例,這個類實現(xiàn)了一個特殊的接口,名為"監(jiān)聽器接口"。監(jiān)聽器負責處理事件源發(fā)生的事件,監(jiān)聽器是一個對象,為了處理事件源發(fā)生的事件,監(jiān)聽器會自動調(diào)用一個方法來處理事件.對每個明確的事件的產(chǎn)生,都相應地定義一個明確的Java方法。2.請具體說明Java的事件處理機制中涉及到哪些方面?答:Java對事件的處理采用授權(quán)的事件模型,即委托代理模型。委托代理模型(Delegationmodel)的原理是:當事件產(chǎn)生時,該事件被送到產(chǎn)生該事件的組件去處理,而要能夠處理這個事件,該組件必須注冊(register)有與該事件有關(guān)的一個或多個被稱為listeners監(jiān)聽器的類,這些類包含了相應的方法能接受事件并對事件進行處理,包括如下處理過程:(1)確定事件源圖形界面的每個可能產(chǎn)生事件的組件稱為事件源,不同事件源上發(fā)生的事件的種類不同。(2)注冊事件源如果希望事件源上發(fā)生的事件被程序處理,就要把事件源注冊給能夠處理該事件源上那種類型的事件監(jiān)聽器。監(jiān)聽器是屬于一個類的實例,這個類實現(xiàn)了一個特殊的接口,名為“監(jiān)聽器接口”。(3)委托處理事件當事件源上發(fā)生監(jiān)聽者可以處理的事件時,事件源把這個事件作為實際參數(shù)傳遞給監(jiān)聽者中負責處理這類事件的方法,該方法根據(jù)事件對象中封裝的信息來確定如何響應這個事件。3.事件處理中,事件接口有什么作用?事件適配器類有什么作用?請簡述通過實現(xiàn)接口和繼承適配器來實施事件處理有什么異同?答:事件處理機制中,事件接口是一個抽象類,其中定義了可以監(jiān)聽事件的抽象方法。將需要監(jiān)聽的對象封裝在自定義的事件狀態(tài)對象類(EventObject)中,這個類必須繼承java.util.EventObject。事件狀態(tài)對象作為單參傳遞給應響應該事件的自定義監(jiān)聽器方法中。該自定義監(jiān)聽器需實現(xiàn)自定義監(jiān)聽接口,實現(xiàn)此接口中以事件狀態(tài)對象為參數(shù)的方法。發(fā)出某種特定事件的事件源:必須在類中實例化自定義的監(jiān)聽器對象,當監(jiān)聽到eventobject時,調(diào)用相應方法進行處理。事件適配器(Adapter)可以認為是一個簡化版的監(jiān)聽器,而監(jiān)聽器是對一類事件可能產(chǎn)生的所有動作進行監(jiān)聽。每個含有多個方法的AWT監(jiān)聽器接口都配有一個適配器(XxxAdapter)類,這個類實現(xiàn)了接口中的所有方法,但每個方法沒有做任何事情??梢酝ㄟ^繼承適配器類來指定對某些事件的響應動作,而不必實現(xiàn)接口中的每個方法。要說明一點,因為ActionListener接口中只有一個抽象方法,因此沒必要提供適配器類。使用適配器類來實現(xiàn)事件監(jiān)聽,其最大優(yōu)勢在于當事件監(jiān)聽只用到其中一個方法時,不需要重寫抽象接口中的所有方法,消除了代碼冗余,簡化程序開發(fā)代碼量。二、編程題1.如圖13-15所示。標簽1的字號比文本框的字號大,當單擊按鈕時若輸入文本框中的數(shù)正確,則標簽2文本顯示“正確”,否則顯示“不正確”。(a)(b)圖13-15第1題運行結(jié)果importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassProgram13_1extendsJFrame{ publicProgram13_1(){ this.setSize(200,100); JPaneljp=newJPanel(); jp.setLayout(newGridLayout(2,2)); JLabeljb1=newJLabel("6+9="); jb1.setFont(newFont("宋體",Font.BOLD,20)); JTextFieldjt=newJTextField(10); JLabeljb2=newJLabel(); JButtonjbtn=newJButton("ok"); jbtn.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ if(jt.getText().equals("15")) jb2.setText("正確"); else jb2.setText("不正確"); } }); jp.add(jb1); jp.add(jt); jp.add(jb2); jp.add(jbtn); this.add(jp); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } publicstaticvoidmain(String[]args){ Program13_1p=newProgram13_1(); }}2.編寫代碼,創(chuàng)建一個JFrame窗口,為其構(gòu)建兩個單選按鈕,程序運行的初始界面如圖13-16(a)所示。當用戶單擊“禁用”按鈕時,顯示圖13-16(b)所示的界面,單擊“啟用”按鈕時,顯示圖13-16(c)所示的界面。(a)(b)(c)圖13-16第2題運行結(jié)果importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ButtonGroup;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JRadioButton;publicclassProgram13_2extendsJFrame{ publicProgram13_2(){ this.setTitle("單選按鈕"); this.setSize(300,100); JPaneljPanel=newJPanel(); jPanel.setLayout(newFlowLayout()); JRadioButtonjrb1=newJRadioButton("啟用",true); jrb1.setEnabled(false); JRa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修改工程協(xié)議書
- 電子廠里的協(xié)議書
- 借殼收購協(xié)議書
- 差價返利合同范本
- 繪畫裝裱合同范本
- 全面金融協(xié)議書
- 代購服務協(xié)議書
- 租賃戰(zhàn)略合同協(xié)議
- 醫(yī)療講座協(xié)議書
- 恢復耕地合同范本
- 醫(yī)療器械質(zhì)量管理自查報告
- 壓瘡護理健康宣教
- 中醫(yī)科宣教課件
- 2025湖南懷化中方縣高新產(chǎn)業(yè)投資有限公司招聘10人備考題庫有完整答案詳解
- 公共區(qū)域裝修工程技術(shù)標書文檔樣本
- 華為干部管理體系
- 2024年基本級執(zhí)法資格考試題庫及解析(200題)
- 2026中國二手醫(yī)療設(shè)備進出口貿(mào)易現(xiàn)狀與未來發(fā)展預測報告
- 中國國際大學生創(chuàng)新大賽獲獎項目商業(yè)計劃書
- 身邊的工匠精神的事例
- 煤礦安全生產(chǎn)管理制度的內(nèi)容
評論
0/150
提交評論