Java程序設計-試驗2(學生版)_第1頁
Java程序設計-試驗2(學生版)_第2頁
Java程序設計-試驗2(學生版)_第3頁
Java程序設計-試驗2(學生版)_第4頁
Java程序設計-試驗2(學生版)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、華北電力大學實 驗 報 告 實驗名稱 Java程序面向對象設計(一) 課程名稱 Java程序設計 專業(yè)班級: 學生姓名: 學 號: 成 績:指導教師: 張學斌 實驗日期: 華 北 電 力 大 學 實 驗 報 告一、實驗目的及要求1.掌握類的定義。2.掌握成員變量和成員方法的定義。3.掌握構造方法的定義和使用。4.掌握類的多態(tài)性二、實驗環(huán)境Windows2000/Windows XP,JDK 1.21.6 三、試驗內容和步驟要求按照實驗內容,寫出詳細實驗過程和步驟,必要時截圖。實驗1 機動車 1.1實驗要求編寫一個Java應用程序,該程序有兩個類:Vehicle(用于刻畫機動車)和User(主類

2、)。具體要求如下:Vehicle類有一個double類型的變量speed,用于刻畫機動車的速度,一個int型變量power,用于刻畫機動車的功率。定義了speedUp(int s)方法,體現機動車有加速功能。定義了speedDown()方法,體現機動車有減速功能。定義了setPower(int s),用于設置機動車的功率。定義了getPower()方法,用于獲取機動車的功率。在主類User的mian()方法中用Vehicle類創(chuàng)建對象,并讓該對象調用方法設置功率,演示加速和減速功能。1.2程序模板 Vehicle.javapublic class Vehicle 【代碼1】/聲明double型

3、變量speed,刻畫速度 【代碼2】/聲明int型變量power,刻畫功率 void speedUp(int s) 【代碼3】 /將參數s的值與成員變量speed的和賦值給成員變量speed void speedDown(int d) 【代碼4】/將成員變量speed與參數d的差賦值給成員變量speed void setPower(int p) 【代碼5】 /將參數p的值賦值給成員變量power int getPower() 【代碼6】 /返回成員變量power的值 double getSpeed() return speed; -User.javapublic class User publ

4、ic static void main(String args) Vehicle car1,car2; 【代碼7】 /使用new 運算符和默認的構造方法創(chuàng)建對象car1 【代碼8】 /使用new 運算符和默認的構造方法創(chuàng)建對象car2 car1.setPower(128); car2.setPower(76); System.out.println("car1的功率是:"+car1.getPower(); System.out.println("car2的功率是:"+car2.getPower(); 【代碼9】 /car1調用speedUp方法將自己的s

5、peed的值增加80 【代碼10】 /car2調用speedUp方法將自己的speed的值增加80 System.out.println("car1目前的速度:"+car1.getSpeed(); System.out.println("car2目前的速度:"+car2.getSpeed(); car1.speedDown(10); car2.speedDown(20); System.out.println("car1目前的速度:"+car1.getSpeed(); System.out.println("car2目前的速

6、度:"+car2.getSpeed(); 1.3 實驗指導l 創(chuàng)建一個對象時,成員變量被分配空間,這些內存空間稱作該對象的實體或變量,而對象中存放著引用,以確保這些變量被該對象操作使用。l 空對象不能使用,即不能讓一個空對象去調用方法產生行為。假如程序中使用了空對象,在運行時會產生異常:NullPointerException,對象時動態(tài)地分配實體的,Java的編譯器對空對象不做檢查。因此,在編譯時要避免使用空對象。1.4實驗改進(編寫程序,并給出結果)1. 改進speedUp()方法,使得Vehicle類的對象加速時不能將speed值超過200.2. 改進speedDown()方法

7、,使得Vehicle類的對象在減速時不能將speed值小于0.3. 增進一個剎車方法void brake(),Vehicle類的對象調用它能將speed的值變成0.1.5 實驗結果實驗2 家中的電視1.實驗要求 編寫一個Java應用程序,模擬家庭買一臺電視,即家庭將電視作為自己的一個成員,即通過調用一個方法將某個電視的引用傳遞給自己的電視成員。具體要求如下:l 有三個源文件,其中TV.java中的TV類負責創(chuàng)建“電視”對象。Family.java中的Family類負責創(chuàng)建“家庭”對象,MainClass.java是主類。l 在主類的main()方法中首先使用TV類創(chuàng)建一個對象haierTV ,

8、然后使用Family類再創(chuàng)建一個對象zhangsanFamily,并將先前TV類的實例haierTV的引用傳遞給zhangsanFamily對象的成員變量homeTV。2.程序模板TV.javapublic class TV int channel; /電視頻道 void setChannel(int m) if(m>=1) channel=m; int getChannel() return channel; void showProgram() switch(channel) case 1 : System.out.println("綜合頻道"); break;

9、case 2 : System.out.println("經濟頻道"); break; case 3 : System.out.println("文藝頻道"); break; case 4 : System.out.println("國際頻道"); break; case 5 : System.out.println("體育頻道"); break; default : System.out.println("不能收看"+channel+"頻道"); -Family.javap

10、ublic class Family TV homeTV; void buyTV(TV tv) 【代碼1】 /將參數tv賦值給homeTV void remoteControl(int m) homeTV.setChannel(m); void seeTV() homeTV.showProgram(); /homeTV調用showProgram()方法 -MainClass.javapublic class MainClass public static void main(String args) TV haierTV = new TV(); 【代碼2】 /haierTV調用setChann

11、el(int m),并向參數m傳遞5 System.out.println("haierTV的頻道是"+haierTV.getChannel(); Family zhangSanFamily = new Family(); 【代碼3】/zhangSanFamily調用void buyTV(TV tv)方法,并將haierTV傳遞給參數TV System.out.println("zhangSanFamily開始看電視節(jié)目"); zhangSanFamily.seeTV(); int m=2; System.out.println("hangSa

12、nFamily將電視更換到"+m+"頻道"); zhangSanFamily.remoteControl(m); System.out.println("haierTV的頻道是"+haierTV.getChannel(); System.out.println("hangSanFamily再看電視節(jié)目"); zhangSanFamily.seeTV(); 3.實驗結果實驗3 共飲同井水1.實驗要求 編寫程序模擬兩個村莊共用一口水井。編寫一個Village類,該類有一個靜態(tài)的int型成員變量waterAmount,用于模擬井水

13、的水量。在主類Land的main()方法中創(chuàng)建兩個村莊,一個村莊改變了waterAmount的值,另一個村莊查看waterAmount的值。2.程序模板Village.javapublic class Village static int waterAmount; /模擬水井的水量 int peopleNumber; /村莊的人數 String name; /村莊的名字 Village(String s) name = s; static void setWaterAmount(int m) if(m>0) waterAmount = m; void drinkWater(int n)

14、if( waterAmount-n>=0) waterAmount = waterAmount-n; System.out.println(name+"喝了"+n+"升水"); else waterAmount = 0; static int lookWaterAmount() return waterAmount; void setPeopleNumber(int n) peopleNumber = n; int getPeopleNumber() return peopleNumber; -Land.javapublic class Land

15、public static void main(String args) 【代碼1】 /用類名調用setWaterAmount(int m),并向參數傳值200 int leftWater =【代碼2】 /用Village類的類名訪問waterAmount System.out.println("水井中有 "+leftWater+" 升水"); Village zhaoZhuang,maJiaHeZhi; zhaoZhuang = new Village("趙莊"); maJiaHeZhi = new Village("馬家

16、河子"); zhaoZhuang.setPeopleNumber(80); maJiaHeZhi.setPeopleNumber(120); 【代碼3】/zhaoZhuang調用drinkWater(int n),并向參數傳值50 leftWater = 【代碼4】/maJiaHeZhi調用lookWaterAmount()方法 String name=maJiaHeZ; System.out.println(name+"發(fā)現水井中有 "+leftWater+" 升水"); maJiaHeZhi.drinkWater(100);

17、leftWater = 【代碼5】/zhaoZhuang調用lookWaterAmount()方法 name=zhaoZ; System.out.println(name+"發(fā)現水井中有 "+leftWater+" 升水"); int peopleNumber = zhaoZhuang.getPeopleNumber(); System.out.println("趙莊的人口:"+peopleNumber); peopleNumber = maJiaHeZhi.getPeopleNumber(); System.ou

18、t.println("馬家河子的人口:"+peopleNumber); 3.實驗指導l 當java程序執(zhí)行時,類的字節(jié)碼文件被加載到內存,如果該類沒有創(chuàng)建對象,類的實例變量就不會被分配內存。但是,類的類變量,在該類被加載到內存時,就分配了相應的內存變量。如果該類創(chuàng)建對象,那么不同對象的實例變量互不相同,即分配不同的內存空間,而類變量不再重新分配內存,所有對象共享類變量。l 當類的字節(jié)碼文件被加載到內存時,類的實例方法不會被分配入口地址,只有當該類創(chuàng)建對象后,類中的實例方法才分配入口地址。當使用new運算符和構造方法創(chuàng)建對象時,首先分配成員變量給對象,同時實例方法必須分配入口

19、地址,然后再執(zhí)行構造方法中的語句,完成必要的初始化。因而實例方法必須由對象調用執(zhí)行。需要注意的是,當創(chuàng)建第一個對象時,類中的實例方法就分配了入口地址,當再創(chuàng)建對象時,不再分配入口地址,也就是說,方法的入口地址被所有的對象共享。對于類中的類方法,在該類被加載到內存時,就分配了相應的入口地址,即使該類沒有創(chuàng)建對象,也可以直接通過類名調用類方法。4.擴展練習(1) 【代碼3】是否可以是Village.drinkWater(50);,為什么?(2) 【代碼4】是否可以是Village.lookWaterAmount();,為什么?(3) Land類main()方法中倒數第2行代碼是否可以更改為: pe

20、opleNumber = Village.getPeopleNumber(); 為什么?5.實驗結果 實驗4 求方程的根1.實驗要求按照實驗要求使用package語句將方程屬性即計算根的方法封裝在一個有包名的類中,包名是tom.jiafei,類的名字是SquareEquation。編寫一個SunRise的主類,該主類使用import語句引入tom.jiafei包中的SquareEquation類。2.程序模板 模板1 將模板1給出的源文件SquareEquation.java編譯后得到的字節(jié)碼文件復制到c:/1000/tom/jiafei目錄中。 SquareEquation.java pac

21、kage tom.jiafei;public class SquareEquation double a,b,c; double root1,root2; boolean boo; public SquareEquation(double a,double b,double c) this.a=a; this.b=b; this.c=c; if(a!=0) boo=true; else boo=false; public void getRoots() if(boo) System.out.println("是一元2次方程"); double disk=b*b-4*a*c;

22、 if(disk>=0) root1=(-b+Math.sqrt(disk)/(2*a); root2=(-b-Math.sqrt(disk)/(2*a); System.out.printf("方程的根:%f,%fn",root1,root2); else System.out.printf("方程沒有實根n"); else System.out.println("不是一元2次方程"); public void setCoefficient(double a,double b,double c) this.a=a; this.

23、b=b; this.c=c; if(a!=0) boo=true; else boo=false; 模板2 1.設置classpath。假設本地JDK的安裝目錄是:D:jdk1.6。在命令行執(zhí)行如下命令:set classpath = D:jdk1.6jrelibrt.jar;.;c:1000;或 右擊“我的電腦”->屬性->系統特性->高級選項->環(huán)境變量 ,將classpath的值改為classpath = D:jdk1.6jrelibrt.jar;.;c:1000;2.將模板2給出的Java源程序SunRise.java保存到D:2000中。 SunRise.ja

24、va import tom.jiafei.*;public class SunRise public static void main(String args) SquareEquation equation=new SquareEquation(4,5,1); equation.getRoots(); equation.setCoefficient(-3,4,5); equation.getRoots(); 3 實驗指導n 如果使用import語句引入了整個包中的類,那么可能會增加編譯時間。但絕不會影響程序運行的性能。Java運行平臺由所需要的Java類庫和虛擬機組成,這些類庫被包含在一個j

25、relib中的壓縮文件中,當程序執(zhí)行時,Java運行平臺從類庫中加載程序真正使用的類字節(jié)碼到內存。n 可以使用import語言引入自定義包中的類,但必須在classpath中指明包的位置。實驗5 實例成員和類成員1.實驗要求 掌握實例成員和類成員的使用方法2.程序模板 Example.javaclass A 【代碼1】 /聲明一個float型實例變量a 【代碼2】 /聲明一個float型類變量b,即static變量b void setA(float a) 【代碼3】 /將參數a的值賦值給成員變量a void setB(float b) 【代碼4】 /將參數b的值賦值給成員變量b float g

26、etA() return a; float getB() return b; void inputA() System.out.println(a); static void inputB() System.out.println(b); public class Example public static void main(String args) 【代碼5】 /通過類名操作類變量b,并賦值100 【代碼6】 /通過類名調用方法inputB() A cat=new A(); A dog=new A(); 【代碼7】 /cat象調用方法setA(int a)將cat的成員a的值設置為200 【代碼8】 /cat調用方法setB(int b)將cat的成員b的值設置為400 【代碼9】 /dog象調用方法setA(int a)將dog的成員a的值設置為150 【代碼10】 /dog調用方法setB(int b)將dog的成員b的值設置為300 【代碼11】 /cat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論