Java實(shí)驗(yàn)指導(dǎo)書(2013版)_第1頁
Java實(shí)驗(yàn)指導(dǎo)書(2013版)_第2頁
Java實(shí)驗(yàn)指導(dǎo)書(2013版)_第3頁
Java實(shí)驗(yàn)指導(dǎo)書(2013版)_第4頁
Java實(shí)驗(yàn)指導(dǎo)書(2013版)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYJAVA語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書 齊心編著翟亞紅審核計(jì)算機(jī)實(shí)驗(yàn)教學(xué)示范中心2013年1月目錄目錄2實(shí)驗(yàn)一 Java編程環(huán)境使用3實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)導(dǎo)讀3實(shí)驗(yàn)內(nèi)容4實(shí)驗(yàn)總結(jié)7實(shí)驗(yàn)二 Java類編程練習(xí)8實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)導(dǎo)讀8實(shí)驗(yàn)內(nèi)容10實(shí)驗(yàn)總結(jié)21實(shí)驗(yàn)三 圖形用戶界面設(shè)計(jì)22實(shí)驗(yàn)?zāi)康?2實(shí)驗(yàn)導(dǎo)讀22實(shí)驗(yàn)內(nèi)容23實(shí)驗(yàn)總結(jié)29實(shí)驗(yàn)四 Java事件處理30實(shí)驗(yàn)?zāi)康?0實(shí)驗(yàn)導(dǎo)讀30實(shí)驗(yàn)內(nèi)容34實(shí)驗(yàn)總結(jié)41實(shí)驗(yàn)五 多線程程序設(shè)計(jì)42實(shí)驗(yàn)?zāi)康?2實(shí)驗(yàn)導(dǎo)讀42實(shí)驗(yàn)內(nèi)容44實(shí)驗(yàn)總結(jié)49參考文獻(xiàn):50附錄一 Java Code之多態(tài)51附錄

2、二 內(nèi)部類的用法54附錄三 和類有關(guān)的匿名類55附錄四 和接口有關(guān)的匿名類56實(shí)驗(yàn)一 Java編程環(huán)境使用實(shí)驗(yàn)?zāi)康? 掌握J(rèn)ava運(yùn)行環(huán)境的配置2 掌握J(rèn)ava程序的編寫、編譯、運(yùn)行等過程3 熟悉Java語言的基本語法和運(yùn)行原理4 掌握J(rèn)ava的基本數(shù)據(jù)類型、表達(dá)式和程序控制結(jié)構(gòu)5 熟悉Eclipse開發(fā)環(huán)境的基本使用方法實(shí)驗(yàn)導(dǎo)讀1 Java的標(biāo)準(zhǔn)輸入和輸出流java.lang.System類提供了三種有用的標(biāo)準(zhǔn)流:標(biāo)準(zhǔn)輸入流(System.in)、標(biāo)準(zhǔn)輸出流(System.out)和標(biāo)準(zhǔn)出錯(cuò)流(System.err)。通過他們可以實(shí)現(xiàn)數(shù)據(jù)的輸入輸出操作。1) 標(biāo)準(zhǔn)輸入流(System.in)

3、通常用于讀取用戶從鍵盤輸入或用戶定義的輸入設(shè)備的輸入。類java.util.Scanner結(jié)合System.in實(shí)現(xiàn)對(duì)指定數(shù)據(jù)的輸入。2) 標(biāo)準(zhǔn)輸出流(System.out)用于程序的輸出,通常用來在屏幕或用戶指定的輸出設(shè)備上顯示信息。有兩種典型用法:System.out.print(data)實(shí)現(xiàn)在當(dāng)前位置輸出數(shù)據(jù),System.out.println(data)實(shí)現(xiàn)換行輸出數(shù)據(jù)到屏幕或用戶定義的輸出設(shè)備。3) 標(biāo)準(zhǔn)出錯(cuò)流(System.err)用于顯示出錯(cuò)信息,采用System.err.print(data)或System.err.println(data)將指定的data輸出到指定的輸出

4、設(shè)備,默認(rèn)設(shè)備為屏幕。2 javax.swing.JOptionPane對(duì)話框式的輸入和輸出,可以提供較好的界面處理。能通過彈出一個(gè)標(biāo)準(zhǔn)對(duì)話框,來提示用戶??梢酝ㄟ^這個(gè)性質(zhì)來實(shí)現(xiàn)具有對(duì)話框顯示效果的數(shù)據(jù)輸入和輸出。例如:String str=JOptionPane.showInputDialog("輸入您的猜測:");3 java.util.Scannerjava.util.Scanner類可將文本轉(zhuǎn)換成原語或字符串。Scanner對(duì)象通過next()系列方法將文本標(biāo)識(shí)轉(zhuǎn)換成不同類型的值。通常和標(biāo)準(zhǔn)輸入流(System.in)結(jié)合,允許用戶通過標(biāo)準(zhǔn)輸入流讀入數(shù)據(jù)。Scann

5、er類提供的方法:nextByte()、nextshort()、nextLong()、nextDouble()、nextFloat()、nextInt()等。例如: Scanner scanner=new Scanner(System.in); int i=Int(); /從鍵盤輸入一個(gè)整數(shù) scanner.close();4 Java Applet小應(yīng)用程序Java Applet必須由瀏覽器來運(yùn)行,因此必須編寫一個(gè)超文本文件(含有applet標(biāo)記的Web頁),通知瀏覽器來運(yùn)行這個(gè)Java Applet。下面是一個(gè)簡單的HTML文件,使用記事本編輯如下:<applet code= App

6、letTest.class height=300 width=300></applet>超文本中的標(biāo)記<applet>和</applet>用于通知瀏覽器運(yùn)行一個(gè)Java Applet,code通知瀏覽器運(yùn)行哪個(gè)Java Applet。code的=后面是主類的字節(jié)碼文件,width和height規(guī)定了Java Applet的寬度和高度。如果如果HTML文件和字節(jié)碼文件不在同一目錄里,必須在HTML文件中增加選項(xiàng)codebase,來指定小程序中.class文件所在的目錄。實(shí)驗(yàn)內(nèi)容1. 設(shè)置實(shí)驗(yàn)環(huán)境1) 安裝JDK:下載JDK包以后,按安裝向?qū)У奶崾疽来伟惭b

7、。2) 更新環(huán)境變量:a) 在“我的電腦”單擊“屬性”菜單項(xiàng),進(jìn)入“系統(tǒng)屬性”對(duì)話框;b) 選擇“高級(jí)”選項(xiàng)頁;單擊“環(huán)境變量”按鈕,彈出“環(huán)境變量”對(duì)話框;c) 選擇“新建系統(tǒng)變量”,彈出“新建系統(tǒng)變量”對(duì)話框,在“變量名”文本框輸入“JAVA_HOME”,在“變量值”文本框輸入JDK的安裝路徑;d) 編輯“系統(tǒng)變量”中的”path”變量的值,在“變量值”最后增加JDK安裝目錄下的bin目錄,例如”%JAVA_HOME%bin; ”;e) 在“系統(tǒng)變量”選項(xiàng)區(qū)域中查看CLASSPATH 變量,如果不存在,則新建變量CLASSPATH,否則選中該變量,單擊“編輯”按鈕,在“變量值”文本框的起始

8、位置添加”.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;”。3) 進(jìn)入命令行控制臺(tái),分別輸入“java“、“java -version“和“javac“命令,看是否能夠出現(xiàn)正確的提示信息(注意:配置完成后需將原來打開的命令提示符窗口關(guān)閉并重新打開運(yùn)行)。2. 簡單應(yīng)用程序的編寫1) 在D盤上建立javalab文件夾;2) 打開記事本,在其中輸入以下代碼;public class PrintA public static void main(String arg)System.out.println(" ");System.ou

9、t.println(" ");System.out.println(" ");System.out.println(" ");3) 將其保存在javalab目錄下,并命名為PrintA.java;4) 打開命令行窗口,輸入:C:Documents and SettingsAdministrator>d:D:>cd javalabD:javalab>5) 運(yùn)行:D:javalab>javac PrintA.java6) 查看是否已經(jīng)生成class文件;D:javalab>dir/w. . PrintA.ja

10、va PrintA.class7) 運(yùn)行程序查看結(jié)果是否正確。D:javalab>java PrintA 8) 修改PrintA.java的文件名為printa,然后重新編譯會(huì)有什么結(jié)果?為什么?9) 修改PrintA.java文件中的main方法為main1,然后重新編譯并運(yùn)行會(huì)有什么結(jié)果?為什么?3. 簡單Applet的編寫1) 打開記事本,在其中輸入以下代碼;import java.awt.*;import java.applet.Applet;public class AppletTest extends Appletpublic void init()setBackground

11、(Color.cyan);public void paint(Graphics g) g.setColor(Color.blue); /在Java Applet中繪制一行文字:“這是一個(gè)Java Applet 程序” g.drawString("這是一個(gè)Java Applet 程序",10,30); g.setColor(Color.red); g.setFont(new Font("宋體",Font.BOLD,36);/在Java Applet中繪制一行文字:“我改變了字體” g.drawString("我改變了字體",10,100

12、); 2) 將其保存在javalab目錄下,并命名為AppletTest.java;3) 將其編譯成.class文件;4) 打開記事本,在其中輸入以下代碼:<applet code= AppletTest.class height=300 width=300></applet>5) 將其保存在javalab目錄下,并命名為AppletTest.html;6) 在命令行下運(yùn)行:D:javalab>appletviewer AppletTest.html7) 還有一種查看方式,就是直接雙擊AppletTest.html,直接在瀏覽器中查看結(jié)果。8) 將文件中class

13、前面的public去除后再編譯運(yùn)行,看看會(huì)有什么結(jié)果,為什么?9) 如果將class文件放置在D:classes目錄下,應(yīng)該怎樣修改AppletTest.html文件?如果將其放置在AppletTest.html所在文件夾的classes子目錄下還可以怎樣寫?4. String類的常用方法(StringExample.java)閱讀分析下面程序,把程序中的代碼補(bǔ)充完整,并查看結(jié)果。public class StringExample public static void main(String args) String s1 = new String("you are a stude

14、nt"), s2 = new String("how are you");if (【補(bǔ)充代碼】) / 使用equals方法判斷s1與s2是否相同System.out.println("s1與s2相同"); else System.out.println("s1與s2不相同");String s3 = new String("22030219851022024");if (【補(bǔ)充代碼】) / 判斷s3的前綴是否是“220302”System.out.println("吉林省的身份證");

15、String s4 = new String("你"), s5 = new String("我");if (【補(bǔ)充代碼】)/ 按著字典序s4大于s5的表達(dá)式System.out.println("按字典序s4大于s5"); else System.out.println("按字典序s4小于s5");int position = 0;String path = "c:javajspA.java"position = 【補(bǔ)充代碼】/ 獲取path中最后出現(xiàn)的位置System.out.println(

16、"c:javajspA.java中最后出現(xiàn)的位置:" + position);String fileName = 【補(bǔ)充代碼】/ 獲取path中“A.java”子字符串System.out.println("c:javajspA.java中含有的文件名:" + fileName);String s6 = new String("100"), s7 = new String("123.678");int n1 = 【補(bǔ)充代碼】 / 將s6轉(zhuǎn)化成int型數(shù)據(jù)double n2 = 【補(bǔ)充代碼】 / 將s7轉(zhuǎn)化成doub

17、le型數(shù)據(jù)double m = n1 + n2;System.out.println(m);String s8 = 【補(bǔ)充代碼】 / String調(diào)用valuOf(double n)方法將m轉(zhuǎn)化為字符串對(duì)象position = s8.indexOf(".");String temp = 【補(bǔ)充代碼】 / 獲取s8中小數(shù)點(diǎn)后面的小數(shù)System.out.println("數(shù)字" + m + "有" + temp.length() + "位小數(shù)");String s9 = new String("ABCDEF

18、");char a = 【補(bǔ)充代碼】 / 將s9存放到數(shù)組a中for (int i = a.length - 1; i >= 0; i-) System.out.print(" " + ai);5. 在控制臺(tái)下求兩個(gè)實(shí)數(shù)的最大值(CompareTwoNumbers.java)要求:從鍵盤輸入任意兩個(gè)實(shí)數(shù),比較兩個(gè)數(shù)字的大小,將較大的數(shù)輸出。數(shù)據(jù)輸入和輸出用Java的標(biāo)準(zhǔn)輸入流和輸出流來實(shí)現(xiàn)。請(qǐng)按照代碼提示編寫完整程序,并查看結(jié)果。代碼提示:import java.util.Scanner; /導(dǎo)入Scanner對(duì)象;Scanner scanner = new

19、 Scanner(System.in);/實(shí)例化一個(gè)Scanner對(duì)象;number1 = scanner.nextDouble();/從鍵盤輸入一個(gè)實(shí)數(shù)賦值給number1;6. 猜數(shù)字游戲(GuessNumber.java)要求:系統(tǒng)生成一個(gè)1至100之間的隨機(jī)整數(shù)(sysNumber),利用JoptionPane對(duì)話框輸入你的猜測整數(shù)(guessNumber),循環(huán)猜測兩個(gè)數(shù)是否相等,如果(guessNumber>sysNumber),則提示“猜大了,再輸入你的猜測:”,并重新輸入新的猜測整數(shù),如果(guessNumber<sysNumber),則提示“猜小了,再輸入你的猜測

20、:”,并重新輸入新的猜測整數(shù),直到相等控制臺(tái)打印“猜對(duì)了”。請(qǐng)按照代碼提示編寫完整程序,并查看結(jié)果。代碼提示:/生成1至100之間的隨機(jī)數(shù)int sysNumber = (int)(Math.random()*100)+1;/輸入你的猜測,注意數(shù)據(jù)類型的轉(zhuǎn)換String str = JOptionPane.showInputDialog("輸入您的猜測:"); guessNumber = Integer.parseInt(str); 7. 編寫Java程序(SwapMatrix.java)要求:定義一個(gè)二維數(shù)組,并給二維數(shù)組賦值,分別打印原二維數(shù)組和行列互調(diào)后的二維數(shù)組。

21、顯示出的結(jié)果為 實(shí)驗(yàn)總結(jié) 請(qǐng)書寫你對(duì)本次實(shí)驗(yàn)有哪些實(shí)質(zhì)性的收獲和體會(huì),以及對(duì)本次實(shí)驗(yàn)有何良好的建議?實(shí)驗(yàn)二 Java類編程練習(xí)實(shí)驗(yàn)?zāi)康? 掌握類及類的聲明2 掌握對(duì)象的定義和使用3 掌握接口的定義與實(shí)現(xiàn)實(shí)驗(yàn)導(dǎo)讀繼承、封裝和多態(tài)是Java面向?qū)ο蟮?大特性,它們是面向?qū)ο蟪绦蜷_發(fā)的重要環(huán)節(jié)。繼承機(jī)制的使用可以復(fù)用一些定義好的類,減少重復(fù)代碼的編寫。多態(tài)機(jī)制可以動(dòng)態(tài)調(diào)整對(duì)象的調(diào)用,降低對(duì)象之間的依存關(guān)系。同時(shí)為了優(yōu)化繼承與多態(tài),一些類除了繼承父類還可以使用接口的形式,Java中的類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,接口被用來建立類與類之間關(guān)聯(lián)的標(biāo)準(zhǔn)。1 類的繼承(extends)繼承可以理解為現(xiàn)實(shí)世界中的“是

22、一種(is-a)”關(guān)系,實(shí)現(xiàn)繼承是通過extends關(guān)鍵字在聲明類的時(shí)候指定其父類,其聲明格式如下:修飾符 class 類名 extends 父類名繼承某個(gè)父類而生成新的子類不但擁有父類的變量與方法,還可以為子類添加新的成員變量和成員方法,以增強(qiáng)父類的功能,也就是所謂的擴(kuò)展。還可以使用super關(guān)鍵字引用父類的方法,然后再添加新的業(yè)務(wù)代碼。甚至還可以在子類中為父類的某個(gè)方法定義多個(gè)重載方法,增加該類的靈活性。2 訪問修飾符Java中定義了private、public、protected和默認(rèn)的訪問修飾符,這些修飾符控制著對(duì)類和類的成員變量以及成員方法的訪問規(guī)則。另外,還可以輔助static和f

23、inal關(guān)鍵字定義特殊規(guī)則。訪問包位置類修飾符修飾符Privateprotected默認(rèn)修飾符Public本類可見可見可見可見同包其他類不可見可見可見可見其他包的類不可見不可見不可見可見同包的子類不可見可見可見可見其他包的子類不可見可見不可見可見public是公有類型的權(quán)限修飾符,使用public修飾的類、成員變量和成員方法,其他類都可以訪問,包括任意包中的任意類以及子類。private是私有類型的權(quán)限修飾符,使用private修飾的成員變量和成員方法,只能在本類中被使用,在子類中是不可見的,并且對(duì)其他包的類也是不可見的。protected是保護(hù)級(jí)別的權(quán)限修飾符,它保護(hù)成員不會(huì)被其他包或非子類

24、訪問。也就是說protected修飾的成員只能被子類和同一包中定義的其他類訪問。當(dāng)不添加任何權(quán)限修飾符時(shí),編譯器會(huì)使用默認(rèn)權(quán)限修飾符,該修飾符的權(quán)限級(jí)別與protected類似,不同之處在于,其他包定義的子類無法訪問父類默認(rèn)權(quán)限修飾的成員。3 封裝(encapsulation)封裝是指把對(duì)象的屬性隱藏在對(duì)象的內(nèi)部,不允許外部直接訪問和修改。Java規(guī)范中的設(shè)置器和訪問器就是實(shí)現(xiàn)封裝的標(biāo)準(zhǔn)方法,它們用于設(shè)置和獲取對(duì)象的屬性值。設(shè)置器方法的命名一般以set作為方法名的前綴,以屬性名作為后綴。訪問器方法的命名一般以get或is作為方法名稱的前綴,以屬性名作為后綴。對(duì)于boolean類型的屬性,應(yīng)該使

25、用is前綴定義訪問器 方法。例如:public class Car private String color;private boolean running;public String getColor() return color;public void setColor(String color) this.color = color;public boolean isRunning() return running;public void setRunning(boolean running) this.running = running;4 Object類在Java中,所有的類都直接或

26、間接繼承了java.lang.Object類,它是所有類的父類。Object類中常用的兩個(gè)方法為equals()和toString()方法。任何類都可以重寫Object類中的方法。5 對(duì)象的上轉(zhuǎn)型對(duì)象假設(shè)B類是A類的子類或間接子類,當(dāng)我們用子類B創(chuàng)建一個(gè)對(duì)象,并把這個(gè)對(duì)象的引用放到A類的對(duì)象中時(shí):A a = new B(); 稱這個(gè)A類對(duì)象a是子類對(duì)象b的上轉(zhuǎn)型對(duì)象。l 上轉(zhuǎn)對(duì)象不能操作子類新增的成員變量(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。l 上轉(zhuǎn)型對(duì)象可以操作子類繼承或隱藏成員變量,也可以使用子類繼承的或重寫的方法。l 上轉(zhuǎn)型對(duì)象操作子類繼承或重寫的方法時(shí),就是通

27、知對(duì)應(yīng)的子類對(duì)象去調(diào)用這些方法。因此,如果子類重寫了父類的某個(gè)方法后,對(duì)象的上轉(zhuǎn)型對(duì)象調(diào)用這個(gè)方法時(shí),一定是調(diào)用了這個(gè)重寫的方法。l 可以將對(duì)象的上轉(zhuǎn)型對(duì)象再強(qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象,這時(shí),該子類對(duì)象又具備了子類所有屬性和功能。6 多態(tài)(polymophism)多態(tài)性就是指父類的某個(gè)方法被其子類重寫時(shí),可以各自產(chǎn)生自己的功能行為。當(dāng)一個(gè)類有很多子類時(shí),并且這些子類都重寫了父類中的某個(gè)方法。那么當(dāng)我們把子類創(chuàng)建的對(duì)象的引用放到一個(gè)父類的對(duì)象中時(shí),就得到了該對(duì)象的一個(gè)上轉(zhuǎn)型對(duì)象,那么這個(gè)上轉(zhuǎn)的對(duì)象在調(diào)用這個(gè)方法時(shí)就可能具有多種形態(tài)。多態(tài)性的實(shí)現(xiàn):通過方法的重載(overloading)、覆蓋(ove

28、rriding)和接口來實(shí)現(xiàn)。l 方法重載是Java實(shí)現(xiàn)面向?qū)ο蟮亩鄳B(tài)性機(jī)制的一種方式。同一個(gè)類中多個(gè)方法有相同的名字,不同的參數(shù)列表,這種情況稱為方法重載。返回類型不同并不足以構(gòu)成方法重載。當(dāng)重載方法被調(diào)用時(shí),編譯器根據(jù)參數(shù)的類型和數(shù)量來確定實(shí)際調(diào)用哪個(gè)重載方法的版本。l 方法覆蓋是Java實(shí)現(xiàn)多態(tài)性機(jī)制的另一種方式。在類層次結(jié)構(gòu)中,如果子類中的一個(gè)方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,這種情況稱為方法覆蓋。當(dāng)一個(gè)覆蓋方法通過父類引用被調(diào)用,Java根據(jù)當(dāng)前被引用對(duì)象的類型來決定執(zhí)行哪個(gè)版本的方法??梢酝ㄟ^super關(guān)鍵字調(diào)用直屬父類中被覆蓋的方法版本。參考代碼:附

29、錄一 Java Code之多態(tài)。7 接口接口是特殊的類,只有方法的原型,方法的實(shí)現(xiàn)在其子類中具體定義。Java不支持多繼承性,即一個(gè)類只能有一個(gè)父類。單繼承性使得Java簡單,易于管理程序。為了克服單繼承的缺點(diǎn),Java使用了接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。一個(gè)類通過使用關(guān)鍵字implements 聲明自己使用一個(gè)或多個(gè)接口。如果使用多個(gè)接口,用逗號(hào)隔開接口名。如:class A implements Printable,Addable如果一個(gè)類使用了某個(gè)接口,那么這個(gè)類必須實(shí)現(xiàn)該接口的所有方法,即為這些方法提供方法體。接口只關(guān)心功能,并不關(guān)心功能的具體實(shí)現(xiàn)。接口回調(diào)是指:可以把實(shí)現(xiàn)某一接口的類

30、創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法。參考代碼:附錄四 和接口有關(guān)的匿名類8 內(nèi)部類Java支持在一個(gè)類中聲明另一個(gè)類,這樣的類稱作內(nèi)部類,而包含內(nèi)部類的類成為內(nèi)部類的外嵌類。 內(nèi)部類的外嵌類的成員變量在內(nèi)部類中仍然有效,內(nèi)部類中的方法也可以調(diào)用外嵌類中的方法。內(nèi)部類的類體中不可以聲明類變量和類方法。外嵌類的類體中可以用內(nèi)部類聲明對(duì)象,作為外嵌類的成員。參考代碼:附錄二 內(nèi)部類的用法9 匿名類l 和類有關(guān)的匿名類當(dāng)使用類創(chuàng)建對(duì)象時(shí),程序允許我們把類體與對(duì)象的創(chuàng)

31、建組合在一起,也就是說,類創(chuàng)建對(duì)象時(shí),除了構(gòu)造方法還有類體,此類體被認(rèn)為是該類的一個(gè)子類去掉類聲明后的類體,稱作匿名類。匿名類就是一個(gè)子類,由于無名可用,所以不可能用匿名類聲明對(duì)象,但卻可以直接用匿名類創(chuàng)建一個(gè)對(duì)象。匿名類一定是內(nèi)部類,匿名類可以繼承父類的方法也可以重寫父類的方法,匿名類可以訪問外嵌類中的成員變量和方法,匿名類的類體中不可以聲明static成員變量和static方法。匿名類的主要用途就是向方法的參數(shù)傳值。參考代碼:附錄三 和類有關(guān)的匿名類l 和接口有關(guān)的匿名類Java允許直接用接口名和一個(gè)類體創(chuàng)建一個(gè)匿名對(duì)象,此類體被認(rèn)為是實(shí)現(xiàn)了接口的類去掉類聲明后的類體,稱作匿名類。參考代碼

32、:附錄四 和接口有關(guān)的匿名類實(shí)驗(yàn)內(nèi)容1. 對(duì)象的創(chuàng)建和使用編寫一個(gè)圓環(huán)類Ring的Java程序。圓環(huán)類有3個(gè)數(shù)據(jù)成員,分別是內(nèi)半徑innerRadius,外半徑outerRadius和顏色color,這些屬性通過get和set方法進(jìn)行封裝。另外,圓環(huán)類中的getArea方法可以返回其面積。把程序中的代碼補(bǔ)充完整,并查看結(jié)果。public class Ring private double innerRadius; private double outerRadius; public String color; public Ring(double iRadius, double oRadius

33、, String c) /初始化數(shù)據(jù)成員【補(bǔ)充代碼】 /用get和set方法封裝數(shù)據(jù)成員【補(bǔ)充代碼】 public double getArea() 【補(bǔ)充代碼】 public static void main(String args) Ring ring = new Ring(5,8,"red");System.out.println("圓環(huán)的內(nèi)半徑: " + ring.getInnerRadius( );System.out.println("圓環(huán)的外半徑: " + ring.getOuterRadius( );System.ou

34、t.println("圓環(huán)的顏色: " + ring.color); System.out.println("圓環(huán)的面積: " + ring.getArea() + "n");ring.setInnerRadius(4);【補(bǔ)充代碼】 /設(shè)置圓環(huán)ring的外半徑為6ring.setColor("blue");System.out.println("圓環(huán)的內(nèi)半徑: " + ring.getInnerRadius( );System.out.println("圓環(huán)的外半徑: "

35、+ ring.getOuterRadius( );System.out.println("圓環(huán)的顏色: " + ring.color); System.out.println("圓環(huán)的面積: " + ring.getArea(); 思考:1) 將程序中的語句Ring ring = new Ring(5,8,"red"); 改成Ring ring = new Ring();修改后編譯運(yùn)行,此時(shí)有錯(cuò)誤發(fā)生嗎?分析錯(cuò)誤的原因。2) 接著為程序添加一個(gè)如下所示的默認(rèn)構(gòu)造函數(shù),觀察程序運(yùn)行是否還有上述錯(cuò)誤發(fā)生?public Ring() inn

36、erRadius = 1.0; outerRadius = 2.0; color = "white" 3) 如果在輸出圓環(huán)的面積時(shí)要求保留兩位小數(shù),程序如何修改?4) 請(qǐng)為圓環(huán)類Ring在添兩個(gè)方法以便能返回內(nèi)圓和外圓的周長,然后在主函數(shù)main()中分別創(chuàng)建兩個(gè)對(duì)象ring1,ring2以顯示周長。2. 使用類來封裝對(duì)象的屬性和功能編寫一個(gè)Java程序,該程序中有3個(gè)類:Trangle、Lader和Circle,分別用來刻畫“三角形”、“梯形”和“圓形”。具體要求如下:Trangle類具有類型為double的三個(gè)邊(sideA,sideB,sideC),以及周長(leng

37、th)、面積(area)屬性,Trangle類具有返回周長(getLength)、面積(getArea)以及修改三個(gè)邊(setABC)的功能。另外還有一個(gè)boolean型的屬性(boo),該屬性用來判斷三個(gè)數(shù)是否構(gòu)成一個(gè)三角形。Lader類具有類型為double的上底(above)、下底(bottom)、高(height)、面積(area)屬性,具有返回面積(getArea)的功能。Circle類具有類型為double的半徑(radius)、周長(length)和面積(area)屬性,具有返回周長(getLength)、面積(getArea)的功能。把程序中的代碼補(bǔ)充完整,并查看結(jié)果。/ Tr

38、angle .javaclass Trangle double sideA,sideB,sideC,area,length; boolean boo; public Trangle(double a,double b,double c) /帶參數(shù)的構(gòu)造方法 setABC(a,b,c); double getLength() /方法體,要求計(jì)算出length的值并返回 【補(bǔ)充代碼仿照getArea()方法編寫】 public double getArea() if(boo) double p=(sideA+sideB+sideC)/2.0; area=Math.sqrt(p*(p-sideA)*

39、(p-sideB)*(p-sideC) ; return area; else System.out.println("不是一個(gè)三角形,不能計(jì)算面積"); return 0; public void setABC(double a,double b,double c) /參數(shù)a,b,c分別賦值給sideA,sideB,sideC 【補(bǔ)充代碼】 if(【補(bǔ)充代碼】) /a,b,c構(gòu)成三角形的條件表達(dá)式 【補(bǔ)充代碼】 /給boo賦值。 else 【補(bǔ)充代碼】 /給boo賦值。 / Lader.javaclass Lader double above,bottom,height,

40、area; Lader(double a,double b,double h) /帶參數(shù)的構(gòu)造方法,將參數(shù)a,b,h分別賦值給above,bottom,height 【補(bǔ)充代碼】 double getArea() /方法體,,要求計(jì)算出area返回 【補(bǔ)充代碼】 / Circle.javaclass Circle double radius,area, length; Circle(double r) /帶參數(shù)的構(gòu)造方法 【補(bǔ)充代碼】 double getArea() /方法體,要求計(jì)算出area返回 【補(bǔ)充代碼】 double getLength() /getArea方法體的代碼,要求計(jì)算出

41、length返回【補(bǔ)充代碼】 void setRadius(double newRadius) radius=newRadius; double getRadius() return radius; / AreaAndLength.javapublic class AreaAndLength public static void main(String args) double length,area; Circle circle = null; Trangle trangle = null; Lader lader = null; 【補(bǔ)充代碼】 /創(chuàng)建對(duì)象circle(半徑為5) 【補(bǔ)充代碼

42、】 /創(chuàng)建對(duì)象trangle(邊長分別為3,4,5) 【補(bǔ)充代碼】 /創(chuàng)建對(duì)象lader 【補(bǔ)充代碼】 / circle調(diào)用方法返回周長并賦值給length System.out.println("圓的周長:"+length); 【補(bǔ)充代碼】 / circle調(diào)用方法返回面積并賦值給area System.out.println("圓的面積:"+area); 【補(bǔ)充代碼】 / trangle調(diào)用方法返回周長并賦值給length System.out.println("三角形的周長:"+length); 【補(bǔ)充代碼】 / trangle

43、調(diào)用方法返回面積并賦值給area System.out.println("三角形的面積:"+area); 【補(bǔ)充代碼】 / lader調(diào)用方法返回面積并賦值給area System.out.println("梯形的面積:"+area); 【補(bǔ)充代碼】 / trangle調(diào)用方法設(shè)置三個(gè)邊,要求將三個(gè)邊修改為12,34,1。 【補(bǔ)充代碼】 / trangle調(diào)用方法返回面積并賦值給area System.out.println("三角形的面積:"+area); 【補(bǔ)充代碼】 / trangle調(diào)用方法返回周長并賦值給length Sys

44、tem.out.println("三角形的周長:"+length); 3. 掌握上轉(zhuǎn)型對(duì)象的使用,多態(tài)的特性定義一個(gè)抽象(abstract)類,類名為Employee。 Employee的子類有YearWorker、MonthWorker和WeekWorker。YearWorker對(duì)象按年領(lǐng)取薪水(每年10萬),MonthWorker對(duì)象按月領(lǐng)取薪水(每月1萬),WeekWorker對(duì)象按周領(lǐng)取薪水(每周0.5萬,設(shè)定一個(gè)月4周)。Employee類有一個(gè)抽象(abstract)方法:public abstract double earnings();子類必須重寫父類的ea

45、rnings()方法,給出各自領(lǐng)取每年報(bào)酬的具體方式。有一個(gè)Company類,該類用Employee數(shù)組作為成員,Employee數(shù)組的單元可以是YearWorker對(duì)象、MonthWorker對(duì)象、WeekWorker對(duì)象的上轉(zhuǎn)型對(duì)象。程序能輸出Company對(duì)象一年需要支付的薪水總額。請(qǐng)按模版要求,將代碼補(bǔ)充完整。abstract class Employee public abstract double earnings();class YearWorker extends Employee 【補(bǔ)充代碼】/重寫earnings()方法class MonthWorker extends E

46、mployee 【補(bǔ)充代碼】/重寫earnings()方法class WeekWorker extends Employee 【補(bǔ)充代碼】/重寫earnings()方法class Company Employee employees;double salaries = 0;Company(Employee employees) this.employees = employees;public double salariesPay() salaries = 0;【補(bǔ)充代碼】/計(jì)算salariesreturn salaries;public class HardWork public stati

47、c void main(String args) Employee employees = new Employee20;for (int i = 0; i < employees.length; i+) if(i%3=0)employeesi = new WeekWorker();else if(i%3=1)employeesi = new MonthWorker();else if(i%3=2)employeesi = new YearWorker();Company company = new Company(employees);System.out.println("

48、公司年工資總額:" + company.salariesPay();4. 掌握嵌套類和內(nèi)部類的概念和用法編寫一個(gè)程序要求定義一個(gè)外部類Outer,然后在Outer類中定義一個(gè)內(nèi)部類Inner和局部類Local,內(nèi)部類Inner和局部類Local的任務(wù)都是顯示出外部類中的數(shù)組元素,然后求出這些數(shù)組元素的平均值。請(qǐng)按模版要求,將代碼補(bǔ)充完整。class Outer private int data;Outer(int x) data = x;void checkInner() Inner innerObj = new Inner();【補(bǔ)充代碼】 / 調(diào)用Inner對(duì)象的show()方法

49、System.out.println("內(nèi)部類計(jì)算的平均值: " + innerObj.average();void checkLocal() class Local void show() System.out.print("從局部類顯示數(shù)組元素:");for (int i = 0; i < data.length; i+) System.out.print(datai + " ");System.out.println();int average() int sum = 0;for (int i = 1; i < da

50、ta.length; i+) sum += datai;【補(bǔ)充代碼】 / 返回data數(shù)組的平均值Local localObj = new Local();localObj.show();System.out.println("局部類計(jì)算的平均值: " + localObj.average();class Inner void show() System.out.print("從內(nèi)部類顯示數(shù)組元素:");for (int i = 0; i < data.length; i+) 【補(bǔ)充代碼】 / 打印data數(shù)組的每個(gè)元素System.out.pri

51、ntln();int average() int sum = 0;for (int i = 1; i < data.length; i+) sum += datai;return sum / data.length;public class InnerClassTest public static void main(String args) int a = 6, 8, 9, 22, 34, 7, 2, 1, 15 ;Outer outerObj = new Outer(a);outerObj.checkInner();【補(bǔ)充代碼】 / 調(diào)用outerObj對(duì)象的checkLocal方法

52、5. 編寫一個(gè)學(xué)生信息管理系統(tǒng),掌握接口的定義方法以及類的繼承、封裝和多態(tài)的特性。圖 學(xué)生信息管理系統(tǒng)類圖1) 定義學(xué)生類Student.java,該類有學(xué)號(hào)、姓名和系部三個(gè)成員變量,并用get和set方法進(jìn)行屬性的封裝,請(qǐng)參考類圖進(jìn)行編寫。2) 定義接口IStudentDAO,其中包含下列數(shù)據(jù)操作方法/ 插入學(xué)生信息記錄public void insertStudent(Student stu);/ 刪除指定學(xué)號(hào)學(xué)生信息記錄public void deleteStudent(String sno);/ 更新指定學(xué)生信息記錄public void updateStudent(Student stu);/ 按學(xué)號(hào)查詢指定學(xué)生信息記錄public Student findStudentBySno(String sno);/ 顯示指定學(xué)號(hào)學(xué)生信息記錄public void displayStudentBySno(String sno);/ 顯示所有學(xué)生信息記錄public void displayAllStudent();3) 定義接口IStudentDAO的實(shí)現(xiàn)類StudentDAOImpl,其中包含一個(gè)靜態(tài)的集合對(duì)象用來保存學(xué)生信息記錄,以及接口的所有實(shí)現(xiàn)方法,請(qǐng)參考類圖進(jìn)行編寫。代碼提示:static List<Student> stude

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論