實驗 4 包、接口與異常處理(exception)
一、實驗目的
??? 了解 Java 中包(package)、接口(interface)和異常處理(exception)的作用,掌握包、接口、
異常處理的設計方法。
二、實驗要求
1.?了解 Java 系統(tǒng)包的結構。
2.?掌握創(chuàng)建自定義包的方法。
3.?掌握使用系統(tǒng)接口的技術和創(chuàng)建自定義接口的方法。
4.?理解系統(tǒng)異常處理的機制和創(chuàng)建自定義異常的方法。
三、實驗內(nèi)容
(一)了解并使用 Java 的系統(tǒng)包
??? 包是類和接口的集合。利用包可以把常用的類或功能相似的類放在一個包中。Java 語言提供系統(tǒng) 包,其中包含了大量的類,可以在編寫 Java 程序時直接引用它們。為便于管理和使用它們,將這些類 分為了不同的包。包又稱類庫或 API 包,所謂 API(Application Program Interface)即應用程序接口。API 包—方面提供豐富的類與方法供大家使用,如畫圖形、播放聲音等,另一方面又負責和系統(tǒng) 軟硬件打交道,圓滿實現(xiàn)用戶程序的功能。所有 Java API 包都以“java.”開頭,以區(qū)別用戶創(chuàng)建的包。
??? 接口解決了 Java 不支持多重繼承的問題,可以通過實現(xiàn)多個接口達到與多重繼承相同的功能。
??? 處理程序運行時的錯誤和設計程序同樣重要,只有能夠完善處理運行時出錯的程序,軟件系統(tǒng)才 能長期穩(wěn)定地運行,異常處理就是說明如何處理程序運行時出錯的問題。???
(二)創(chuàng)建并使用自定義包
??? 1.自定義包的聲明方式
??????? <自定義包名>
??? 聲明包語句必須添加在源程序的第一行,表示該程序文件聲明的全部類都屬于這個包。
??? 2.創(chuàng)建自定義包 Mypackage
??? 在存放源程序的文件夾中建立一個子文件夾 Mypackage。例如,在“E:\java\程序”文件夾之中
創(chuàng)建一個與包同名的子文件夾 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 類,該類 具有計算今年的年份,可以輸出一個帶有年月日的字符串的功能。
¨?編寫 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);//返回當年的年份
??????? }
??????? 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 程序功能:給定某人姓名與出生日期,計算該人年齡,并輸出該人姓名,年齡,出生日期。程序使用了 KY4_1_YMD 的方法來計算年齡。
¨?編寫 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()?????????????????????????????????? //計算年齡
??????? {
??????????? return KY4_1_YMD.thisyear() - birth.year(); //返回當前年與出生年的差即年齡
??????? }
??????? public void output()
??????? {
??????????? System.out.println("姓名 : "+name);
??????????? System.out.println("出生日期: "+birth.toString());
??????????? System.out.println("今年年齡 : "+age());
??????? }
??? }
¨?編譯并運行程序,結果如圖 4.3 所示。
(三)使用接口技術
??? 1.實現(xiàn) MouseListener 和 MouseMotionListener 兩個接口
¨?編寫實現(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) { // 記錄起點坐標
???????? 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) { // 記錄終點坐標
???????? x2=e.getX();
???????? y2=e.getY();
???????? repaint();
????? }
????? public void mouseMoved(MouseEvent e) {}
}
¨?編譯 KY4_3.java 文件。
¨?編寫 KY4_3.html 文件,源代碼如下。
?????????
?????????
?????????
??? (5)在瀏覽器中打開 KY4_3.html 文件,在窗口中拖動鼠標可以隨意畫出一條線
(四)了解異常處理機制
1.?編寫使用 try…catch 語句處理異常的程序文件 KY4_4.java,源代碼如下。
??????? public class KY4_6{
???????? public static void main(String[] arg3) {
???????? System.out.println("這是一個異常處理的例子\n");
??????? try {
????????? int i=10;
????????? i /=0;
??????? }
??????? catch (ArithmeticException e) {
????????? System.out.println("異常是:"+e.getMessage());
??????? }
??????? finally {
????????? System.out.println("finally 語句被執(zhí)行");
??????? }
????? }
??? }
編譯并運行程序
??? 注意:如果在 catch 語句中聲明的異常類是 Exception,catch 語句也能正確地捕獲,這是因為
Exception是ArithmeticException的父類。如果不能確定會發(fā)生哪種情況的異常,那么最好指定catch
的參數(shù)為 Exception,即說明異常的類型為 Exception。
2.?編寫包含多個 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ù)組下標越界:"+e);
??????? }
????? }
? }?
?
一、實驗目的
??? 了解 Java 中包(package)、接口(interface)和異常處理(exception)的作用,掌握包、接口、
異常處理的設計方法。
二、實驗要求
1.?了解 Java 系統(tǒng)包的結構。
2.?掌握創(chuàng)建自定義包的方法。
3.?掌握使用系統(tǒng)接口的技術和創(chuàng)建自定義接口的方法。
4.?理解系統(tǒng)異常處理的機制和創(chuàng)建自定義異常的方法。
三、實驗內(nèi)容
(一)了解并使用 Java 的系統(tǒng)包
??? 包是類和接口的集合。利用包可以把常用的類或功能相似的類放在一個包中。Java 語言提供系統(tǒng) 包,其中包含了大量的類,可以在編寫 Java 程序時直接引用它們。為便于管理和使用它們,將這些類 分為了不同的包。包又稱類庫或 API 包,所謂 API(Application Program Interface)即應用程序接口。API 包—方面提供豐富的類與方法供大家使用,如畫圖形、播放聲音等,另一方面又負責和系統(tǒng) 軟硬件打交道,圓滿實現(xiàn)用戶程序的功能。所有 Java API 包都以“java.”開頭,以區(qū)別用戶創(chuàng)建的包。
??? 接口解決了 Java 不支持多重繼承的問題,可以通過實現(xiàn)多個接口達到與多重繼承相同的功能。
??? 處理程序運行時的錯誤和設計程序同樣重要,只有能夠完善處理運行時出錯的程序,軟件系統(tǒng)才 能長期穩(wěn)定地運行,異常處理就是說明如何處理程序運行時出錯的問題。???
(二)創(chuàng)建并使用自定義包
??? 1.自定義包的聲明方式
???????
??? 聲明包語句必須添加在源程序的第一行,表示該程序文件聲明的全部類都屬于這個包。
??? 2.創(chuàng)建自定義包 Mypackage
??? 在存放源程序的文件夾中建立一個子文件夾 Mypackage。例如,在“E:\java\程序”文件夾之中
創(chuàng)建一個與包同名的子文件夾 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 類,該類 具有計算今年的年份,可以輸出一個帶有年月日的字符串的功能。
¨?編寫 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);//返回當年的年份
??????? }
??????? 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 程序功能:給定某人姓名與出生日期,計算該人年齡,并輸出該人姓名,年齡,出生日期。程序使用了 KY4_1_YMD 的方法來計算年齡。
¨?編寫 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()?????????????????????????????????? //計算年齡
??????? {
??????????? return KY4_1_YMD.thisyear() - birth.year(); //返回當前年與出生年的差即年齡
??????? }
??????? public void output()
??????? {
??????????? System.out.println("姓名 : "+name);
??????????? System.out.println("出生日期: "+birth.toString());
??????????? System.out.println("今年年齡 : "+age());
??????? }
??? }
¨?編譯并運行程序,結果如圖 4.3 所示。
(三)使用接口技術
??? 1.實現(xiàn) MouseListener 和 MouseMotionListener 兩個接口
¨?編寫實現(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) { // 記錄起點坐標
???????? 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) { // 記錄終點坐標
???????? x2=e.getX();
???????? y2=e.getY();
???????? repaint();
????? }
????? public void mouseMoved(MouseEvent e) {}
}
¨?編譯 KY4_3.java 文件。
¨?編寫 KY4_3.html 文件,源代碼如下。
?????????
?????????
?????????
??? (5)在瀏覽器中打開 KY4_3.html 文件,在窗口中拖動鼠標可以隨意畫出一條線
(四)了解異常處理機制
1.?編寫使用 try…catch 語句處理異常的程序文件 KY4_4.java,源代碼如下。
??????? public class KY4_6{
???????? public static void main(String[] arg3) {
???????? System.out.println("這是一個異常處理的例子\n");
??????? try {
????????? int i=10;
????????? i /=0;
??????? }
??????? catch (ArithmeticException e) {
????????? System.out.println("異常是:"+e.getMessage());
??????? }
??????? finally {
????????? System.out.println("finally 語句被執(zhí)行");
??????? }
????? }
??? }
編譯并運行程序
??? 注意:如果在 catch 語句中聲明的異常類是 Exception,catch 語句也能正確地捕獲,這是因為
Exception是ArithmeticException的父類。如果不能確定會發(fā)生哪種情況的異常,那么最好指定catch
的參數(shù)為 Exception,即說明異常的類型為 Exception。
2.?編寫包含多個 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ù)組下標越界:"+e);
??????? }
????? }
? }?
?
評論
查看更多