版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java面向對象程序設計試驗指導書適用專業(yè):計算機網絡技術執(zhí)筆人:周輝奎南昌工學院信息學院編二〇一三年十月目錄試驗項目一Java開發(fā)環(huán)境搭建 1試驗項目二Java語言基礎 8試驗項目三Java語言面向對象基礎 21試驗項目四圖形用戶界面設計 39試驗項目五異常處理 44試驗項目一Java開發(fā)環(huán)境搭建一、試驗目標和要求:(一)目標:1、熟悉安裝JDK、JRE;2、熟悉環(huán)境變量配置;3、熟悉Eclipse;4、掌握命令提醒符運行第一個java程序。(二)要求:1、認真做好試驗前各項準備工作,熟悉試驗內容和機器操作步驟。2、遵守試驗室規(guī)章制度和試驗課堂教學紀律。3、認真完成試驗任務,填寫試驗匯報。二、試驗時數(shù):2課時三、試驗器材:操作系統(tǒng):WindowsXP操作系統(tǒng)應用系統(tǒng):Eclipse四、試驗內容或步驟:試驗1.1Java開發(fā)環(huán)境搭建1、JavaJDK安裝單擊JavaJDK安裝包,然后彈出提醒框,點擊下一步,直到選擇安裝目錄圖1所表示,將安裝目錄放在E:\Java\jdk1.6.0_35\,然后繼續(xù)下一步。圖1設定JDK安裝目錄JDK(Java開發(fā)工具)安裝完成后,系統(tǒng)會自動安裝JRE(Java運行時環(huán)境),更改JRE安裝目錄,將其和JDK放在同一目錄下,圖2所表示。圖2設定JRE安裝目錄安裝完成后,出現(xiàn)圖2所表示界面。圖3Java環(huán)境安裝結束界面2、配置環(huán)境變量JavaJDK安裝完成后,并不能立即使用,還需要配置相關環(huán)境變量。右鍵單擊我電腦屬性彈出以下對話框,選擇高級環(huán)境變量。圖4系統(tǒng)高級屬性對話框 首先,在系統(tǒng)變量中新建一個JAVA_HOME變量,該變量值為JDK安裝目錄。在此為E:\Java\jdk1.6.0_35\。(和前面安裝時指定目錄一致)圖4JAVA_HOME環(huán)境變量設置注意:變量值后不需要加任何符號。然后在系統(tǒng)變量中查找path變量,假如存在,則將JDK安裝目錄下bin文件夾添加其后,多個目錄以分號隔開,圖5所表示。假如不存在則新建一個,然后將bin目錄放進去即可是E:\Java\jdk1.6.0_35\bin;圖5在path變量中添加Javabin目錄新建classpath環(huán)境變量,該變量值為JDK安裝目錄下lib目錄,在此為:;%JAVA_HOME%\lib。圖6所表示。圖6classpath環(huán)境變量設定配置完成后,單擊開始運行,輸入cmd,圖7所表示,確定,打開命令行窗口。圖7打開命令行窗口命令在命令行窗口中輸入java–version命令,顯示安裝Java版本信息,圖8所表示,則表明javaJDK、JRE安裝成功。圖8JavaJDK、JRE安裝測試結果在命令行窗口中輸入javac命令,顯示安裝javac一系列選項參數(shù),圖9所表示,則表明java開發(fā)環(huán)境搭建成功。圖9Java環(huán)境測試結果【附錄】利用命令提醒符來運行Java程序:1、假設在F盤文件夾javaexe有HelloWorld.java文件。【操作步驟】開始——運行——cmd,一步步按以下輸入(注意:類名和編譯文件名必需大小寫一致)說明:javac命令表示編譯;java命令表示運行。【總結】開發(fā)Java程序之前JDK、JRE安裝及環(huán)境配置一、先安裝JDK、JRE,安裝時必需全部在同一個目錄,假設在E:\Java\jdk1.6.0_35\。安裝完,用命令提醒符測試安裝是否正確。開始——運行——cmd—— java–version,假如顯示JDK版本,則安裝正確。二、配置環(huán)境變量1、右擊我電腦屬性,選高級環(huán)境變量。2、在系統(tǒng)變量中新建一個變量名為JAVA_HOME,變量值為E:\Java\jdk1.6.0_35\3、在系統(tǒng)變量中查找path變量,假如存在,則將JDK安裝目錄下bin文件夾添加其后,多個目錄以分號隔開,E:\Java\jdk1.6.0_35\bin;4、新建classpath環(huán)境變量,變量值為;%JAVA_HOME%\lib環(huán)境變量配置完,用命令提醒符測試配置是否正確。開始——運行——cmd—— javac,假如顯示javac一系列選項參數(shù),則表明java開發(fā)環(huán)境搭建成功。五、注意事項:1、注意使用javac命令編譯源程序。2、注意使用java命令運行程序。六、練習項目及思索題:1、怎樣搭建java開發(fā)環(huán)境。試驗項目二Java語言基礎一、試驗目標和要求:(一)目標:了解Java數(shù)據(jù)類型;掌握多種變量申明方法;了解運算符優(yōu)先級;掌握Java基礎數(shù)據(jù)類型、運算符和表示式、數(shù)組使用方法;了解Java程序語法結構,掌握次序結構、選擇結構和循環(huán)結構語法程序設計方法;經過以上內容,掌握Java語言編程規(guī)則。(二)要求:1、編寫一個申明Java不一樣數(shù)據(jù)類型變量程序;2、編寫一個使用運算符、表示式、變量程序;3、編寫一個使用Java數(shù)組程序;4、編寫表示式語句、復合語句程序;5、編寫使用不一樣選擇結構程序;6、編寫使用不一樣循環(huán)結構結構程序。二、試驗時數(shù):6課時三、試驗器材:操作系統(tǒng):WindowsXP操作系統(tǒng)應用系統(tǒng):Eclipse四、試驗內容或步驟:試驗2.1申明不一樣數(shù)據(jù)類型變量編寫申明不一樣數(shù)據(jù)類型變量程序文件EXP2_1.java,源代碼以下。publicclassEXP2_1{publicstaticvoidmain(Stringargs[]){byteb=0x55;shorts=0x55ff;inti=1000000;longl=0xffffL;charc='a';floatf=0.23F;doubled=0.7E-3;booleanB=true;StringS="這是字符串類數(shù)據(jù)類型";System.out.println("字節(jié)型變量b="+b);System.out.println("短整型變量s="+s);System.out.println("整型變量i="+i);System.out.println("長整型變量l="+l);System.out.println("字符型變量c="+c);System.out.println("浮點型變量f="+f);System.out.println("雙精度變量d="+d);System.out.println("布爾型變量B="+B);System.out.println("字符串類對象S="+S);}}編譯并運行該程序,結果圖2.1所表示。圖2.1了解變量使用范圍建立EXP2_2.java文件,經過本程序了解變量使用范圍,源代碼以下。publicclassEXP2_2{staticinti=10;publicstaticvoidmain(Stringargs[]){{intk=10;System.out.println("i="+i);System.out.println("k="+k);}System.out.println("i="+i);System.out.println("k="+k);//編譯時將犯錯,已出k使用范圍}}編譯EXP2_2.java此時會出現(xiàn)錯誤提醒圖2.2所表示。因為變量k在方法塊中申明,在方法塊之外它是不存在,所以編譯時會犯錯。圖2.2修改上面程序成功運行該程序思索:EXP2_2.java程序說明了什么問題?使用關系運算符和邏輯運算符建立使用關系運算符和邏輯運算符程序文件,源代碼以下。classEXP2_3{publicstaticvoidmain(Stringargs[]){inta=25,b=20,e=3,f=0;booleand=a<b;System.out.println("a=25,b=20,e=3,f=0");System.out.println("因為關系表示式a<b為假,所以其邏輯值為:"+d);if(e!=0&&a/e>5)System.out.println("因為e非0且a/e為8大于5,所以輸出a/e="+a/e);if(f!=0&&a/f>5)System.out.println("a/f="+a/f);elseSystem.out.println("因為f值為0,所以輸出f="+f);}}編譯并運行該程序,結果圖2.3所表示。圖2.3使用數(shù)組建立使用數(shù)組程序,本程序建立了一個長度為51維數(shù)組,一個長度為122維數(shù)組,源代碼以下。publicclassEXP2_4{publicstaticvoidmain(Stringargs[]){inta[]=newint[5];intarr1[][]=newint[3][4];a[0]=10;a[1]=10+a[0];a[2]=30;a[3]=40;a[4]=a[1]+a[2];arr1[0][0]=0;arr1[0][1]=1;arr1[0][2]=2;arr1[1][0]=3;arr1[1][1]=4;arr1[1][2]=5;arr1[2][0]=6;arr1[2][1]=7;arr1[2][2]=8;System.out.println("a["+0+"]="+a[0]);System.out.println("a["+1+"]="+a[1]);System.out.println("a["+2+"]="+a[2]);System.out.println("a["+3+"]="+a[3]);System.out.println("a["+4+"]="+a[4]);System.out.println("arr1("+0+","+0+")="+arr1[0][0]);System.out.println("arr1("+0+","+1+")="+arr1[0][1]);System.out.println("arr1("+0+","+2+")="+arr1[0][2]);System.out.println("arr1("+1+","+0+")="+arr1[1][0]);System.out.println("arr1("+1+","+1+")="+arr1[1][1]);System.out.println("arr1("+1+","+2+")="+arr1[1][2]);}}編譯并運行程序,結果圖2.4所表示。圖2.4使用表示式語句和復合語句建立包含表示式語句程序,源代碼以下。classEXP2_5{publicstaticvoidmain(String[]args){intk,i=3,j=4;k=20*8/4+i+j*i;System.out.println("表示式(20*8/4+i+j*i)="+k);}}建立包含復合語句程序,源代碼以下。classEXP2_6{publicstaticvoidmain(Stringargs[]){intk,i=3,j=4;k=i+j;System.out.println("在復合塊外輸出k="+k);{floatf;f=j+4.5F;i++;System.out.println("在復合塊內輸出f="+f);System.out.println("在復合塊內輸出k="+k);}System.out.println("在復合塊外輸出i="+i);}}編譯并運行上述兩個源程序,結果圖2.5、2.6所表示。將變量i在塊內定義會怎樣?改變其它變量位置看看會發(fā)生什么改變。思索:指出程序復合結構和變量使用范圍。圖2.5圖2.6使用選擇語句使用if...else語句程序功效:使用if...else語句結構多分支,判定某十二個月是否為閏年。閏年條件是符合下面二者之一:能被4整除,但不能被100整除;能被4整除,又能被100整除。編寫源程序文件,代碼以下。publicclassEXP2_7{publicstaticvoidmain(Stringargs[]){booleanleap;intyear=;if((year%4==0&&year%100!=0)||(year%400==0))//方法1System.out.println(year+"年是閏年");elseSystem.out.println(year+"年不是閏年");year=;//方法2if(year%4!=0)leap=false;elseif(year%100!=0)leap=true;elseif(year%400!=0)leap=false;elseleap=true;if(leap==true)System.out.println(year+"年是閏年");elseSystem.out.println(year+"年不是閏年");year=2050;//方法3if(year%4==0){if(year%100==0){if(year%400==0)leap=true;elseleap=false;}elseleap=false;}elseleap=false;if(leap==true)System.out.println(year+"年是閏年");elseSystem.out.println(year+"年不是閏年");}}編譯運行程序,其結果圖2.7所表示。圖2.7思索:本程序中有多個選擇語句,哪些含有嵌套關系?使用switch語句程序功效:在不一樣溫度時顯示不一樣解釋說明。程序源代碼以下。classEXP2_8{publicstaticvoidmain(Stringargs[]){intc=38;switch(c<10?1:c<25?2:c<35?3:4){case1:System.out.println(""+c+"℃有點冷。要多穿衣服。");case2:System.out.println(""+c+"℃正適宜。出去玩吧。");case3:System.out.println(""+c+"℃有點熱。");default:System.out.println(""+c+"℃太熱了!開空調。");}}}編譯運行程序,其結果圖2.8所表示。圖2.8使用循環(huán)語句for循環(huán)語句練習程序功效:按5度增量打印出一個從攝氏溫度到華氏溫度轉換表。程序源代碼以下。classEXP2_9{publicstaticvoidmain(Stringargs[]){inth,c;System.out.println("攝氏溫度\t華氏溫度");for(c=0;c<=40;c+=5){h=c*9/5+32;System.out.println("\t"+c+"\t"+h);}}}編譯并運行程序,其結果圖2.9所表示。圖2.9while循環(huán)語句練習程序功效:運行程序后從鍵盤輸入數(shù)字1/2/3后,可顯示抽獎得到獎品;假如輸入其它數(shù)字或字符顯示“沒有獎品給你!”。程序源代碼以下。importjava.io.*;classEXP2_10{publicstaticvoidmain(Stringargs[])throwsIOException{charch;System.out.println("按1/2/3數(shù)字鍵可得大獎!");System.out.println("按’Q’鍵可退出循環(huán)操作.");while((ch=(char)System.in.read())!=''){System.in.skip(2);//跳過回車鍵switch(ch){case'1':System.out.println("恭喜你得大獎,一輛汽車!");break;case'2':System.out.println("不錯呀,你得到一臺筆記本電腦!");break;case'3':System.out.println("沒有白來,你得到一臺冰箱!");break;case‘q’:System.out.println(“歡迎下次再來!”);System.exit(0);default:System.out.println("真不幸,你沒有獎品!下次再來吧。");}}}}編譯源程序。在命令提醒符窗口運行程序,然后分別按1、2、3、r結果圖2.10所表示。圖2.10do…while循環(huán)語句練習程序功效:求1+2+…+100之和,并將求和表示式和所求和顯示出來。程序源代碼以下。classEXP2_11{publicstaticvoidmain(Stringargs[]){intn=1,sum=0;do{sum+=n++;}while(n<=100);System.out.println("1+2+...+100="+sum);}}(3)編譯并運行程序,結果圖2.11所表示。圖2.11多重循環(huán)練習輸出九九乘法表程序,源代碼以下。publicclassEXP2_12{publicstaticvoidmain(Stringargs[]){inti,j,n=9;System.out.print("*|");for(i=1;i<=n;i++)System.out.print(""+i);System.out.print("\n|");for(i=1;i<=n;i++)System.out.print("");System.out.println();for(i=1;i<=n;i++){System.out.print(""+i+"|");for(j=1;j<=i;j++)System.out.print(""+i*j);System.out.println();}}}編譯并運行程序,結果圖2.12所表示。五、注意事項:1、注意Java集成開發(fā)環(huán)境Eclipse使用。2、注意Java程序編碼方法及書寫習慣。六、練習項目及思索題:1、觀察輸出結果,發(fā)覺九九表行和列沒有對齊,怎樣才能輸出一張行列對齊九九表?試驗項目三Java語言面向對象基礎一、試驗目標和要求:(一)目標:1、經過編程和上機試驗了解Java語言是怎樣表現(xiàn)面向對象編程基礎思想;2、了解類封裝方法,和怎樣創(chuàng)建類和對象;3、了解組員變量和組員方法特征;4、掌握面向對象程序設計方法;5、了解類繼承性和多態(tài)性作用;6、了解接口作用。(二)要求:編寫一個表現(xiàn)面向對象思想程序;編寫一個創(chuàng)建對象和使用對象方法程序;編寫一個顯示目前日期和時間程序;編寫不一樣組員變量修飾方法程序;編寫不一樣組員方法修飾方法程序;編寫表現(xiàn)類繼承性(組員變量、組員方法、組員變量隱藏)程序;編寫表現(xiàn)類多態(tài)性(組員方法重載、結構方法重載)程序;8、編寫表現(xiàn)接口功效程序。二、試驗時數(shù):12課時三、試驗器材:操作系統(tǒng):WindowsXP操作系統(tǒng)應用系統(tǒng):Eclipse四、試驗內容或步驟:試驗3.1設計類來描述真實客觀世界中事物,使用類組員變量來表示事物屬性和狀態(tài),使用類組員方法來提供對組員變量訪問或修改程序功效:設計一個用來描述汽車類,使用類非靜態(tài)組員變量來表示汽車車主姓名、目前速率和目前方向盤轉向角度,使用類非靜態(tài)組員方法來表示改變汽車速率和停車兩個操作。程序源代碼以下。publicclassEXP3_1{privateStringownerName;//車主姓名privatefloatcurSpeed;//目前車速privatefloatcurDirInDegree;//目前方向盤轉向角度publicEXP3_1(StringownerName){this.ownerName=ownerName;}publicEXP3_1(StringownerName,floatspeed,floatdirInDegree){this(ownerName);this.curSpeed=speed;this.curDirInDegree=dirInDegree;}publicStringgetOwnerName(){//提供對車主姓名訪問returnownerName;}publicfloatgetCurDirInDegree(){//提供對目前方向盤轉向角度訪問returncurDirInDegree;}publicfloatgetCurSpeed(){//提供對目前車速訪問returncurSpeed;}publicvoidchangeSpeed(floatcurSpeed){//提供改變目前車速this.curSpeed=curSpeed;}publicvoidstop(){//提供停車this.curSpeed=0;}}編譯源程序。創(chuàng)建類對象,使用對象方法(類非靜態(tài)方法)來訪問或修改對象變量(類非靜態(tài)變量)創(chuàng)建類EXP3_1對象,在調用類結構函數(shù)時指定對象變量初始值,以后再使用對象方法來訪問或修改對象變量值。程序代碼以下。publicclassEXP3_2{publicstaticvoidmain(String[]args){EXP3_1car=newEXP3_1("成龍",200f,2System.out.println("車主姓名:"+car.getOwnerName());System.out.println("目前車速:"+car.getCurSpeed());System.out.println("目前轉向角度:"+car.getCurDirInDegree());car.changeSpeed(80);System.out.println("在調用changeSpeed(80)后,車速變?yōu)?"+car.getCurSpeed());car.stop();System.out.println("在調用stop()后,車速變?yōu)?"+car.getCurSpeed());}}編譯并運行,結果圖3.1所表示。圖3.1編寫顯示目前時間和日期程序程序功效:該程序經過使用一個自定義類Time,實現(xiàn)顯示目前日期和時間功效。程序代碼以下。importjava.util.Calendar;classTime{privateCalendart;privateinty,m,d,hh,mm,ss;Time(){t=Calendar.getInstance();y=t.get(t.YEAR);m=t.get(t.MONTH)+1;d=t.get(t.DATE);hh=t.get(t.HOUR_OF_DAY);mm=t.get(t.MINUTE);ss=t.get(t.SECOND);}publicStringgetDate(){returny+"年"+m+"月"+d+"日";}publicStringgetTime(){returnhh+"時"+mm+"分"+ss+"秒";}}publicclassEXP3_3{publicstaticvoidmain(String[]args){Timet=newTime();System.out.println("目前日期:"+t.getDate());System.out.println("目前時間:"+t.getTime());}}編譯并運行,結果圖3.2所表示。圖3.2使用修飾符來限定類組員變量或組員方法屬性有時需要公開部分變量和方法,有時需要嚴禁其它對象使用變量和方法,這時能夠使用修飾符來實現(xiàn)這個目標。常見修飾符以下:publicprivateprotectedpackagestaticfinaltransientvolatile不一樣修飾符訪問控制權限如表3.1所表示。訪問權限修飾符類子類包全部類和包public√√√√private√protected√√√package√√表3.1程序功效:經過兩個類StaticDemo、EXP3_4說明靜態(tài)變量/方法和實例變量/方法區(qū)分。程序源代碼以下。classStaticDemo{staticintx;inty;publicstaticintgetX(){returnx;}publicstaticvoidsetX(intnewX){x=newX;}publicintgetY(){returny;}publicvoidsetY(intnewY){y=newY;}}publicclassEXP3_4{publicstaticvoidmain(String[]args){System.out.println("靜態(tài)變量x="+StaticDemo.getX());System.out.println("實例變量y="+StaticDemo.getY());//非法,編譯時將犯錯StaticDemoa=newStaticDemo();StaticDemob=newStaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println("靜態(tài)變量a.x="+a.getX());System.out.println("實例變量a.y="+a.getY());System.out.println("靜態(tài)變量b.x="+b.getX());System.out.println("實例變量b.y="+b.getY());}}對上面源程序進行編譯,會出現(xiàn)圖3.3所表示犯錯提醒。圖3.3將源程序中犯錯語句刪除或使用解釋符//隱藏起來,比如,//System.out.println("實例變量y="+StaticDemo.getY());重新編譯并運行該程序,結果圖3.4所表示。圖3.4調用方法時參數(shù)傳輸練習在其它語言中,函數(shù)調用或過程調用時參數(shù)有傳值調用和傳地址調用之分。在Java中,方法中參數(shù)傳輸能夠分為傳值調用或對象方法調用等方法。傳值調用即傳輸參數(shù)是基礎數(shù)據(jù)類型,調用方法時在方法中將不能改變參數(shù)值,這意味著只能使用它們。對象調用是指先調用對象,再調用對象方法,這種方法能夠修改許可存取組員變量。所以,假如不想改變參數(shù)值,能夠采取傳值調用方法。假如想改變參數(shù)值,可采取對象調用方法,間接修改參數(shù)值。5.1、編寫一個傳值調用程序(1)程序功效:程序首先給整型變量x和y賦一個初值10,然后使用傳值調用方法調用方法ff1對x和y做乘方及輸出x和y乘方值,最終再輸出x和y乘方值。(2)程序源代碼以下。classEXP3_5{publicstaticvoidmain(String[]args){intx=10,y=10;ff1(x,y);System.out.println("x="+x+",y="+y);}staticvoidff1(intpassX,intpassY){passX=passX*passX;passY=passY*passY;System.out.println("passX="+passX+",passY="+passY);}}(3)編譯并運行,結果圖3.5。圖3.55.2、編寫一個調用對象方法程序(1)程序功效:經過調用對象方法在方法調用后修改了組員變量值。(2)程序源代碼以下。classEXP3_6{publicstaticvoidmain(String[]args){Powerp=newPower();p.ff2(10,10);System.out.println("方法調用后x="+p.x+",y="+p.y);}}classPower{intx=10,y=10;voidff2(intpassX,intpassY){System.out.println("初始時x="+x+",y="+y);x=passX*passX;y=passY*passY;System.out.println("方法調用中x="+x+",y="+y);}}(3)編譯并運行,結果圖3.6。圖3.6類繼承性練習新類可從現(xiàn)有類中產生,并保留現(xiàn)有類組員變量和方法并可依據(jù)需要對它們加以修改。新類還可添加新變量和方法。這種現(xiàn)象就稱為類繼承。當建立一個新類時,無須寫出全部組員變量和組員方法。只要簡單地申明這個類是從一個已定義類繼承下來,就能夠引用被繼承類全部組員。被繼承類稱為父類或超類(superclass),這個新類稱為子類。Java提供了一個龐大類庫讓開發(fā)人員繼承和使用。設計這些類是出于公用目標,所以,極少有某個類恰恰滿足你需要。你必需設計自己能處理實際問題類,假如你設計這個類僅僅實現(xiàn)了繼承,則和父類毫無兩樣。所以,通常要對子類進行擴展,即添加新屬性和方法。這使得子類要比父類大,但更具特殊性,代表著一組更具體對象。繼承意義就在于此。創(chuàng)建將被繼承類(1)程序源代碼以下。publicclassEXP3_7{protectedStringxm;//含有保護修飾符組員變量protectedintxh;voidsetdata(Stringm,inth)//設置數(shù)據(jù)方法{xm=m;xh=h;}publicvoidprint()//輸出數(shù)據(jù)方法{System.out.println(xm+","+xh);}}(2)編譯源程序。創(chuàng)建將被繼承類(1)程序功效:經過EXP3_7類產生子類EXP3_8,其不僅含有父類組員變量xm(姓名)、xh(學號),還定義了新組員變量xy(學院)、xi(系)。在程序中調用了父類print方法,同時能夠看出子類也含有該方法。(2)程序源代碼以下。classEXP3_8extendsEXP3_7{protectedStringxy;protectedStringxi;publicstaticvoidmain(Stringargs[]){EXP3_7p1=newEXP3_7();p1.setdata("李四",12321);p1.print();EXP3_8s1=newEXP3_8();s1.setdata("張三",12345);//調用父類組員方法s1.xy="成全部信息工程學院";//訪問本類組員變量s1.xi="計算機系";//訪問本類組員變量s1.print();System.out.print(s1.xm+","+s1.xy+","+s1.xi);}}編譯并運行,結果圖3.7所表示。圖3.7了解組員方法覆蓋方法經過繼承子類能夠繼承父類中全部能夠被子類訪問組員方法,但假如子類方法和父類方法同名,則不能繼承,此時稱子類方法覆蓋了父類方法,簡稱為方法覆蓋(override)。方法覆蓋為子類提供了修改父類組員方法能力。比如,子類能夠修改層層繼承下來Object根類toString方法,讓它輸出部分更有用信息。下面程序顯示了在子類Circle中添加toString方法,用來返回圓半徑和圓面積信息。編寫覆蓋Object類toString方法程序文件EXP3_9.java,源代碼以下。classCircle{privateintradius;Circle(intr){setRadius(r);}publicvoidsetRadius(intr){radius=r;}publicintgetRadius(){returnradius;}publicdoublearea(){return3.14159*radius*radius;}publicStringtoString(){return"圓半徑:"+getRadius()+"圓面積:"+area();}}publicclassEXP3_9{publicstaticvoidmain(Stringargs[]){Circlec=newCircle(10);System.out.println("\n"+c.toString());}}編譯并運行,結果圖3.8所表示。圖3.8this、super和super()使用程序功效:程序功效:說明this、super和super()使用方法。程序首先定義Point(點)類,然后創(chuàng)建點子類Line(線)。最終經過LX3_10類輸出線段長度。程序中經過super(a,b)調用父類Point結構方法為父類x和y賦值。在子類LinesetLine方法中,因為參數(shù)名和組員變量名相同,為給組員變量賦值,使用this引用,告訴編譯器是為目前類組員變量賦值。在length和toString方法中使用父類組員變量時,使用super引用,告訴編譯器使用是父類組員變量。程序源代碼以下。classPoint{protectedintx,y;Point(inta,intb){setPoint(a,b);}publicvoidsetPoint(inta,intb){x=a;y=b;}}classLineextendsPoint{protectedintx,y;Line(inta,intb){super(a,b);setLine(a,b);}publicvoidsetLine(intx,inty){this.x=x+x;this.y=y+y;}publicdoublelength(){intx1=super.x,y1=super.y,x2=this.x,y2=this.y;returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}publicStringtoString(){return"直線端點:["+super.x+","+super.y+"]["+x+","+y+"]直線長度:"+this.length();}}publicclassEXP3_10{publicstaticvoidmain(Stringargs[]){Lineline=newLine(50,50);System.out.println("\n"+line.toString());}}編譯并運行,結果圖3.9。圖3.9類多態(tài)性練習類繼承發(fā)生在多個類之間,而類多態(tài)只發(fā)生在同一個類上。在一個類中,能夠定義多個同名方法,只要確定它們參數(shù)個數(shù)和類型不一樣。這種現(xiàn)象稱為類多態(tài)。多態(tài)使程序簡練,為程序員帶來很大便利。在OOP中,當程序要實現(xiàn)多個相近功效時,就給對應方法起一個共同名字,用不一樣參數(shù)代表不一樣功效。這么,在使用方法時不管傳輸什么參數(shù),只要能被程序識別就能夠得到確定結果。類多態(tài)性表現(xiàn)在方法重載(overload)上,包含組員方法和結構方法重載。7.1、方法重載(1)程序功效:使用同名方法對兩個、三個或用數(shù)組容納一組數(shù)進行排序(2)程序源代碼以下。classIntSort{publicStringsort(inta,intb){if(a>b)returna+""+b;elsereturnb+""+a;}publicStringsort(inta,intb,intc){intswap;if(a<b){swap=a;a=b;b=swap;}if(a<c){swap=a;a=c;c=swap;}if(b<c){swap=b;b=c;c=swap;}returna+""+b+""+c;}publicStringsort(intarr[]){Strings="";intswap;for(inti=0;i<arr.length;i++)for(intj=0;j<arr.length-1;j++)if(arr[j]>arr[j+1]){swap=arr[j];arr[j]=arr[j+1];arr[j+1]=swap;}for(inti=0;i<arr.length;i++)s=s+arr[i]+"";returns;}}publicclassEXP3_11{publicstaticvoidmain(String[]args){IntSorts=newIntSort();inta=30,b=12,c=40;intarr[]={34,8,12,67,44,98,52,23,16,16};System.out.println("兩個數(shù)排序結果:"+s.sort(a,b));System.out.println("三個數(shù)排序結果:"+s.sort(a,b,c));System.out.println("數(shù)組排序結果:"+s.sort(arr));}}(3)編譯并運行,結果圖3.10所表示。圖3.107.2、結構函數(shù)重載結構方法名稱和類同名,沒有返回類型。盡管結構方法看起來和通常組員方法沒有差異,但它不是方法,也不是類組員。所以,結構方法不能直接調用,只能由new操作符調用。結構方法對于類是十分關鍵,對象初始化任務要靠結構方法來完成。重載結構方法目標是提供多個初始化對象能力,使程序員能夠依據(jù)實際需要選擇適宜結構方法來初始化對象。程序源代碼以下。classRunDemo{privateStringuserName,password;RunDemo(){System.out.println("全部為空!");}RunDemo(Stringname){userName=name;}RunDemo(Stringname,Stringpwd){this(name);password=pwd;check();}voidcheck(){Strings=null;if(userName!=null)s="用戶名:"+userName;elses="用戶名不能為空!";if(password!="12345678")s=s+"口令無效!";elses=s+"口令:********";System.out.println(s);}}publicclassEXP3_12{publicstaticvoidmain(String[]args){newRunDemo();newRunDemo("張三");newRunDemo(null,"李四");newRunDemo("王五","12345678");}}編譯并運行,結果圖3.11所表示。圖3.11使用接口技術程序功效:在程序中申明一個自定義接口NL,用來計算一個人年紀。程序源代碼以下。interfaceNL{//定義接口intyear=;intage();voidoutput();}publicclassEXP3_13implementsNL{//實現(xiàn)接口Stringxm;//類自己組員變量(姓名)intcsrq;//類自己組員變量(出生日期)publicEXP3_13(Stringn1,inty){//類結構方法xm=n1;csrq=y;}publicintage(){//實現(xiàn)接口方法returnyear-csrq;//這里直接使用了接口中常量year}publicvoidoutput(){//實現(xiàn)接口方法System.out.println(this.xm+"今年年紀是"+this.age()+"歲");}publicstaticvoidmain(Stringargs[])//類自己組員方法{NLa=newEXP3_13("張三",1990);a.output();}}編譯并運行,結果圖3.12。圖3.12五、注意事項:1、注意Java集成開發(fā)環(huán)境Eclipse使用。2、注意Java程序編碼方法及書寫習慣。六、練習項目及思索題:1、集成開發(fā)環(huán)境Eclipse使用。試驗項目四圖形用戶界面設計一、試驗目標和要求:(一)目標:1、掌握GUI編程中關鍵概念:AWT,Swing,窗口、面板,容器布局,布局管理器;2、掌握GUI編程;3、掌握事件編程機制。(二)要求:1、認真做好試驗前各項準備工作,熟悉試驗內容和機器操作步驟。2、遵守試驗室規(guī)章制度和試驗課堂教學紀律。3、認真完成試驗任務,填寫試驗匯報。二、試驗時數(shù):6課時三、試驗器材:操作系統(tǒng):WindowsXP操作系統(tǒng)應用系統(tǒng):Eclipse四、試驗內容或步驟:試驗4.11.創(chuàng)建一個黃色面板,經過add()方法在面板中添加了一個按鈕,然后將該面板添加到一個JFrame實例中,JFrame實例背景被設置為藍綠色importjava.awt.*;importjavax.swing.*;publicclassFrameWithPanel{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("FramewithPanel"); ContainercontentPane=frame.getContentPane(); contentPane.setBackground(Color.CYAN); JPanelpanel=newJPanel(); panel.setBackground(Color.yellow); JButtonbutton=newJButton("Pressme"); panel.add(button); contentPane.add(panel,BorderLayout.SOUTH); frame.setSize(300,200); frame.setVisible(true); }}2.ActionEvent事件監(jiān)聽程序定義在組件類中.在Frame中添加一個自定義命令按鈕類(mybutton)對象,讓它為注冊事件監(jiān)聽程序。importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassActionEventDemo2{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("ActionEventDemo2"); //創(chuàng)建自定義組件MyButton實例 MyButtonb=newMyButton("Close"); frame.getContentPane().add(b,BorderLayout.CENTER); frame.pack(); frame.setVisible(true); }}//下面是MyButton類定義:classMyButtonextendsJButtonimplementsActionListener{ publicMyButton(Stringtext){ super(text); //注冊事件監(jiān)聽程序 addActionListener(this); } //出現(xiàn)ActionEvent事件時,將結束程序運行 publicvoidactionPerformed(ActionEvente){ System.exit(0); }}3.使用CardLayout布局管理器管理組件,實現(xiàn)翻撲克牌效果。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCardLayoutDemoextendsMouseAdapter{ JPanelp1,p2,p3,p4,p5; JLabell1,l2,l3,l4,l5; //申明一個CardLayout對象 CardLayoutmyCard; JFrameframe; ContainercontentPane; publicstaticvoidmain(Stringargs[]){ CardLayoutDemothat=newCardLayoutDemo(); that.go(); } publicvoidgo(){ frame=newJFrame("CardTest"); contentPane=frame.getContentPane(); myCard=newCardLayout(); //設置CardLayout 布局管理器 contentPane.setLayout(myCard); p1=newJPanel(); p2=newJPanel(); p3=newJPanel(); p4=newJPanel(); p5=newJPanel(); //為每個JPanel創(chuàng)建一個標簽并設定不一樣 //背景顏色,方便于區(qū)分 l1=newJLabel("ThisisthefirstJPanel"); p1.add(l1); p1.setBackground(Color.yellow); l2=newJLabel("ThisisthesecondJPanel"); p2.add(l2); p2.setBackground(Color.green); l3=newJLabel("ThisisthethirdJPanel"); p3.add(l3); p3.setBackground(Color.magenta); l4=newJLabel("ThisisthefourthJPanel"); p4.add(l4); p4.setBackground(Color.white); l5=newJLabel("ThisisthefifthJPanel"); p5.add(l5); p5.setBackground(Color.cyan); //設定鼠標事件監(jiān)聽程序 p1.addMouseListener(this); p2.addMouseListener(this); p3.addMouseListener(this); p4.addMouseListener(this); p5.addMouseListener(this); //將每個JPanel作為一張卡片加入frame內容窗格 contentPane.add(p1,"First"); contentPane.add(p2,"Second"); contentPane.add(p3,"Third"); contentPane.add(p4,"Fourth"); contentPane.add(p5,"Fifth"); //顯示第一張卡片 myCard.show(contentPane,"First"); frame.setSize(300,200); frame.setVisible(true); } //處理鼠標事件,每當敲擊鼠標鍵時,即顯示下一張卡片。 //假如已經顯示到最終一張,則重新顯示第一張。 publicvoidmouseClicked(MouseEvente){ myCard.next(contentPane); }}4.求給定整數(shù)平方根.編寫一個綜合程序,帶有簡單界面,實現(xiàn)整數(shù)平方根計算(可選)importjava.awt.event.*;importjava.awt.*;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;classDwindowextendsJFrameimplementsActionListener{ JTextFieldinputNumber; JTextAreashow; Dwindow(Strings){ super(s); inputNumber=newJTextField(22); inputNumber.addActionListener(this); show=newJTextArea(); add(inputNumber,BorderLayout.NORTH); JScrollPanesp=newJScrollPane(); sp.setViewportView(show); add(sp,BorderLayout.CENTER); setBounds(60,60,300,300); setVisible(true); validate(); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); } publicvoidactionPerformed(ActionEvente){ booleanboo=false; if(e.getSource()==inputNumber){ Strings=inputNumber.getText(); chara[]=s.toCharArray(); for(inti=0;i<a.length;i++){ if(!(Character.isDigit(a[i]))) boo=true; } if(boo==true)//彈出“警告”消息對話框 { JOptionPane.showMessageDialog(this,"您輸入了非法字符","警告對話框", JOptionPane.WARNING_MESSAGE); inputNumber.setText(null); }elseif(boo==false){ intnumber=Integer.parseInt(s); show.append("\n"+number+"平方根:"+Math.sqrt(number)); } } }}publicclassEx01{ publicstaticvoidmain(Stringargs[]){ newDwindow("帶對話框窗口,求給定整數(shù)平方根"); }}五、注意事項:1、注意經過接口來完成事件處理時,應實現(xiàn)接口中全部方法。六、練習項目及思索題:1、Java事件處理機制是怎樣2、若一個數(shù)據(jù)只有兩種取值可能,采取哪種組件表示比較適宜?假如有二種到三種取值可能,采取哪種適宜?假如取值可能大于5個,采取哪種組件適宜?試驗項目五異常處理一、試驗目標和要求:(一)目標:1、了解異常類作用,2、掌握對異常捕捉和處理方法,(二)要求:了解系統(tǒng)異常處理機制;創(chuàng)建自定義異常類型;二、試驗時數(shù):4課時三、試驗器材:操作系統(tǒng):WindowsXP操作系統(tǒng)應用系統(tǒng):Eclipse四、試驗內容或步驟:試驗5.1使用try…catch語句處理異常異常類型匹配處理方法程序功效:在程序中主動產生一個ArithmeticException類型被0除異常,并用catch語句捕捉這個異常。最終經過ArithmeticException類對象e方法getMessage給出異常具體類型并顯示出來。程序源代碼以下。publicclassEXP5_1{publicstaticvoidmain(String[]arg3){System.out.println("這是一個異常處理例子\n");try{inti=10;i/=0;}catch(ArithmeticExceptione){System.out.println("異常是:"+e.getMessage());}finally{System.out.println("finally語句被實施");}}}編譯并運行,結果圖5.1所表示。圖5.1異常類型不匹配處理方法程序源代碼以下。publicclassEXP5_2{publicstaticvoidmain(String[]args){System.out.println(“這是一個異常處理例子\n”);try{inti=10;i/=0;}catch(IndexOutOfBoundsExceptione){System.out.println("異常是:"+e.getMessage());}finally{System.out.println("finally語句被實施");}}}編譯并運行,結果圖5.2所表示。圖5.2因為EXP5_2程序試圖捕捉一個異常類為IndexOutOfBoundsException異常,但發(fā)生異常卻是ArithmeticException類,所以,程序能夠經過編譯但在運行時,系統(tǒng)會給出異常匯報:匯報所發(fā)生但沒有被捕捉異常。不過在此之前,其它語句和finally語句將會被實施。包含多個catch子句異常處理方法程序功效::在try子句中設計兩個可能出現(xiàn)異常,當a為0時會發(fā)生異常。另外一個是肯定異常,因為數(shù)組c長度為1,定義c[42]是為法。經過兩個catch子句分別來捕捉異常。程序源代碼以下。publicclassEXP5_3{publicstaticvoidmain(String[]args){try{inta=args.length;System.out.println("\na="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("發(fā)生了被0除:"+e);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("數(shù)組下標越界:"+e);}}}編譯并運行,結果圖5.3所表示。圖5.3使用throw語句拋出異常在上面試驗中,能夠發(fā)覺,異常對象是Java運行時由系統(tǒng)拋出。拋出異常也能夠經過使用throw語句實現(xiàn)。throw是Java語言
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023六年級數(shù)學下冊 二 圓柱和圓錐第四課時 圓柱的體積教案 蘇教版
- 租賃倉庫合同(2篇)
- 自擔風險的合同(2篇)
- 西南林業(yè)大學《城市規(guī)劃原理》2021-2022學年第一學期期末試卷
- 西京學院《藝術鑒賞》2021-2022學年第一學期期末試卷
- 西京學院《攝影攝像基礎》2021-2022學年第一學期期末試卷
- 別克新一代君威按鍵操作課件
- 西京學院《電子系統(tǒng)綜合設計實訓》2021-2022學年期末試卷
- 風力發(fā)電 課件
- 浣溪沙課件圖片
- 臨床護理帶教老師培訓
- 水電站管護協(xié)議書范文范本
- 酒店直播方案
- 安徽省合肥市第五十中學西校區(qū)2024-2025學年期中考試七年級數(shù)學試題(無答案)
- 湖北省恩施市沙地初中2024-2025學年八年級數(shù)學上學期期中考試題卷(含答案)
- 國開2024年秋《大數(shù)據(jù)技術概論》形考作業(yè)1-4答案
- 旅游景區(qū)旅游安全風險評估報告
- 部編2024版歷史七年級上冊第三單元《第14課 絲綢之路的開通與經營西域》說課稿
- 合同模板 交稅
- 期中測試卷(試題)2024-2025學年蘇教版數(shù)學六年級上冊
- 人音版音樂三年級上冊全冊教案
評論
0/150
提交評論