一、實(shí)驗(yàn)?zāi)康?
??? 了解 Java 中包(package)、接口(interface)和異常處理(exception)的作用,掌握包、接口、
異常處理的設(shè)計(jì)方法。
二、實(shí)驗(yàn)要求
1.?了解 Java 系統(tǒng)包的結(jié)構(gòu)。
2.?掌握創(chuàng)建自定義包的方法。
3.?掌握使用系統(tǒng)接口的技術(shù)和創(chuàng)建自定義接口的方法。
4.?理解系統(tǒng)異常處理的機(jī)制和創(chuàng)建自定義異常的方法。
三、實(shí)驗(yàn)內(nèi)容
(一)了解并使用 Java 的系統(tǒng)包
??? 包是類和接口的集合。利用包可以把常用的類或功能相似的類放在一個(gè)包中。Java 語言提供系統(tǒng) 包,其中包含了大量的類,可以在編寫 Java 程序時(shí)直接引用它們。為便于管理和使用它們,將這些類 分為了不同的包。包又稱類庫或 API 包,所謂 API(Application Program Interface)即應(yīng)用程序接口。API 包—方面提供豐富的類與方法供大家使用,如畫圖形、播放聲音等,另一方面又負(fù)責(zé)和系統(tǒng) 軟硬件打交道,圓滿實(shí)現(xiàn)用戶程序的功能。所有 Java API 包都以“java.”開頭,以區(qū)別用戶創(chuàng)建的包。
??? 接口解決了 Java 不支持多重繼承的問題,可以通過實(shí)現(xiàn)多個(gè)接口達(dá)到與多重繼承相同的功能。
??? 處理程序運(yùn)行時(shí)的錯(cuò)誤和設(shè)計(jì)程序同樣重要,只有能夠完善處理運(yùn)行時(shí)出錯(cuò)的程序,軟件系統(tǒng)才 能長期穩(wěn)定地運(yùn)行,異常處理就是說明如何處理程序運(yùn)行時(shí)出錯(cuò)的問題。???
(二)創(chuàng)建并使用自定義包
??? 1.自定義包的聲明方式
???????
??? 聲明包語句必須添加在源程序的第一行,表示該程序文件聲明的全部類都屬于這個(gè)包。
??? 2.創(chuàng)建自定義包 Mypackage
??? 在存放源程序的文件夾中建立一個(gè)子文件夾 Mypackage。例如,在“E:\java\程序”文件夾之中
創(chuàng)建一個(gè)與包同名的子文件夾 Mypackage(E:\java\程序\Mypackage),并將編譯過的 class 文件放入該文件夾中。注意:包名與文件夾名大小寫要一致。再添加環(huán)境變量 classpath 的路徑,例如:
??? E:\j2sdk1.4.2_01\lib; E:\java\程序
3.在包中創(chuàng)建類
¨?YMD.java 程序功能:在源程序中,首先聲明使用的包名 Mypackage,然后創(chuàng)建 YMD 類,該類 具有計(jì)算今年的年份,可以輸出一個(gè)帶有年月日的字符串的功能。
¨?編寫 YMD.java 文件,源代碼如下。
??? package Mypackage;???????????????????? //聲明存放類的包
??? import java.util.*;????????????????????????? //引用 java.util 包
??? public class KY4_1_YMD {
??????? private int year,month,day;
??????? public static void main(String[] arg3){}
??????? public KY4_1_YMD(int y,int m,int d) {
??????????? year = y;
??????????? month = (((m>=1) & (m<=12)) ? m : 1);
??????????? day = (((d>=1) & (d<=31)) ? d : 1);
??????? }
??????? public KY4_1_YMD() {
??????????? this(0,0,0);
??????? }
??????? public static int thisyear() {
???????????? return Calendar.getInstance().get(Calendar.YEAR);//返回當(dāng)年的年份
??????? }
??????? public int year() {
??????????? return year;//返回年份
??????? }
??????? public String toString(){
??????????????? return year+"-"+month+"-"+day;//返回轉(zhuǎn)化為字符串的年-月-日
??????? }
? }
¨?編譯 KY4_1_YMD.java 文件,然后將 KY4_1_YMD.class 文件存放到 Mypackage 文件夾中。
? 3.編寫使用包 Mypackage 中 KY4_1_YMD 類的程序
¨?KY4_2.java 程序功能:給定某人姓名與出生日期,計(jì)算該人年齡,并輸出該人姓名,年齡,出生日期。程序使用了 KY4_1_YMD 的方法來計(jì)算年齡。
¨?編寫 KY4_2.java 程序文件,源代碼如下。
? import Mypackage.KY4_1_YMD; //引用 Mypackage 包中的 KY4_1_YMD 類
? public class KY4_2
? {
??????? private String name;
??????? private KY4_1_YMD birth;
? public static void main(String args[])
??????? {
??????????? KY4_2 a = new KY4_2("張馳",1990,1,11);
??????????? a.output();
??????? }
??????? public KY4_2(String n1,KY4_1_YMD d1)
??????? {
??????????? name = n1;
??????????? birth = d1;
??????? }
??????? public KY4_2(String n1,int y,int m,int d)
??????? {
??????????? this(n1,new KY4_1_YMD(y,m,d));//初始化變量與對象
??????? }
??????? public int age()?????????????????????????????????? //計(jì)算年齡
??????? {
??????????? return KY4_1_YMD.thisyear() - birth.year(); //返回當(dāng)前年與出生年的差即年齡
??????? }
??????? public void output()
??????? {
??????????? System.out.println("姓名 : "+name);
??????????? System.out.println("出生日期: "+birth.toString());
??????????? System.out.println("今年年齡 : "+age());
??????? }
??? }
¨?編譯并運(yùn)行程序,結(jié)果如圖 4.3 所示。
(三)使用接口技術(shù)
??? 1.實(shí)現(xiàn) MouseListener 和 MouseMotionListener 兩個(gè)接口
¨?編寫實(shí)現(xiàn)接口的程序文件 KY4_3.java,源代碼如下。
??????? import java.applet.Applet;
??????? import java.awt.*;
??????? import java.awt.event.*;
??????? public class KY4_3 extends Applet implements MouseListener, MouseMotionListener {
??????? int x1, y1, x2, y2;
????? public void init() {
???????? addMouseListener(this);
???????? addMouseMotionListener(this);
????? }
????? public void paint(Graphics g) {
???????? g.drawLine (x1, y1, x2, y2);
????? }
????? public void mousePressed(MouseEvent e) { // 記錄起點(diǎn)坐標(biāo)
???????? x1=e.getX();
???????? y1=e.getY();
????? }
????? public void mouseClicked(MouseEvent e) {}
????? public void mouseEntered(MouseEvent e) {}
????? public void mouseExited(MouseEvent e) {}
????? public void mouseReleased(MouseEvent e) {}
????? public void mouseDragged(MouseEvent e) { // 記錄終點(diǎn)坐標(biāo)
???????? x2=e.getX();
???????? y2=e.getY();
???????? repaint();
????? }
????? public void mouseMoved(MouseEvent e) {}
}
¨?編譯 KY4_3.java 文件。
¨?編寫 KY4_3.html 文件,源代碼如下。
?????????
?????????
?????????
??? (5)在瀏覽器中打開 KY4_3.html 文件,在窗口中拖動(dòng)鼠標(biāo)可以隨意畫出一條線
(四)了解異常處理機(jī)制
1.?編寫使用 try…catch 語句處理異常的程序文件 KY4_4.java,源代碼如下。
??????? public class KY4_6{
???????? public static void main(String[] arg3) {
???????? System.out.println("這是一個(gè)異常處理的例子\n");
??????? try {
????????? int i=10;
????????? i /=0;
??????? }
??????? catch (ArithmeticException e) {
????????? System.out.println("異常是:"+e.getMessage());
??????? }
??????? finally {
????????? System.out.println("finally 語句被執(zhí)行");
??????? }
????? }
??? }
編譯并運(yùn)行程序
??? 注意:如果在 catch 語句中聲明的異常類是 Exception,catch 語句也能正確地捕獲,這是因?yàn)?
Exception是ArithmeticException的父類。如果不能確定會(huì)發(fā)生哪種情況的異常,那么最好指定catch
的參數(shù)為 Exception,即說明異常的類型為 Exception。
2.?編寫包含多個(gè) catch 子句的 KY4_8.java 程序,源代碼如下。
? public class KY4_5{
????? public static void main(String[] args) {
??????? try {
????????? int a=args.length;
????????? System.out.println("\na = "+a);
????????? int b=42/a;
????????? int c[]={1};
????????? c[42]=99;
??????? }
??????? catch (ArithmeticException e) {
????????? System.out.println("發(fā)生了被 0 除:"+e);
??????? }
??????? catch (ArrayIndexOutOfBoundsException e) {
????????? System.out.println("數(shù)組下標(biāo)越界:"+e);
??????? }
????? }
? }?
?
評論