实验 4 包、接口与异常处理(exception)
一、实验目的
了解 Java 中包(package)、接口(interface)和异常处理(exception)的作用,掌握包、接口、
异常处理的设计方法。
二、实验要求
1. 了解 Java 系统包的结构。
2. 掌握创建自定义包的方法。
3. 掌握使用系统接口的技术和创建自定义接口的方法。
4. 理解系统异常处理的机制和创建自定义异常的方法。
三、实验内容
(一)了解并使用 Java 的系统包
包是类和接口的集合。利用包可以把常用的类或功能相似的类放在一个包中。Java 语言提供系统 包,其中包含了大量的类,可以在编写 Java 程序时直接引用它们。为便于管理和使用它们,将这些类 分为了不同的包。包又称类库或 API 包,所谓 API(Application Program Interface)即应用程序接口。API 包—方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统 软硬件打交道,圆满实现用户程序的功能。所有 Java API 包都以“java.”开头,以区别用户创建的包。
接口解决了 Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才 能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
(二)创建并使用自定义包
1.自定义包的声明方式
<自定义包名>
声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
2.创建自定义包 Mypackage
在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“E:\java\程序”文件夹之中
创建一个与包同名的子文件夹 Mypackage(E:\java\程序\Mypackage),并将编译过的 class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量 classpath 的路径,例如:
E:\j2sdk1.4.2_01\lib; E:\java\程序
3.在包中创建类
¨ YMD.java 程序功能:在源程序中,首先声明使用的包名 Mypackage,然后创建 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;//返回转化为字符串的年-月-日
}
}
¨ 编译 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.实现 MouseListener 和 MouseMotionListener 两个接口
¨ 编写实现接口的程序文件 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 语句被执行");
}
}
}
编译并运行程序
注意:如果在 catch 语句中声明的异常类是 Exception,catch 语句也能正确地捕获,这是因为
Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch
的参数为 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("发生了被 0 除:"+e);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界:"+e);
}
}
}
一、实验目的
了解 Java 中包(package)、接口(interface)和异常处理(exception)的作用,掌握包、接口、
异常处理的设计方法。
二、实验要求
1. 了解 Java 系统包的结构。
2. 掌握创建自定义包的方法。
3. 掌握使用系统接口的技术和创建自定义接口的方法。
4. 理解系统异常处理的机制和创建自定义异常的方法。
三、实验内容
(一)了解并使用 Java 的系统包
包是类和接口的集合。利用包可以把常用的类或功能相似的类放在一个包中。Java 语言提供系统 包,其中包含了大量的类,可以在编写 Java 程序时直接引用它们。为便于管理和使用它们,将这些类 分为了不同的包。包又称类库或 API 包,所谓 API(Application Program Interface)即应用程序接口。API 包—方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统 软硬件打交道,圆满实现用户程序的功能。所有 Java API 包都以“java.”开头,以区别用户创建的包。
接口解决了 Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才 能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
(二)创建并使用自定义包
1.自定义包的声明方式
声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
2.创建自定义包 Mypackage
在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“E:\java\程序”文件夹之中
创建一个与包同名的子文件夹 Mypackage(E:\java\程序\Mypackage),并将编译过的 class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量 classpath 的路径,例如:
E:\j2sdk1.4.2_01\lib; E:\java\程序
3.在包中创建类
¨ YMD.java 程序功能:在源程序中,首先声明使用的包名 Mypackage,然后创建 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;//返回转化为字符串的年-月-日
}
}
¨ 编译 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.实现 MouseListener 和 MouseMotionListener 两个接口
¨ 编写实现接口的程序文件 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 语句被执行");
}
}
}
编译并运行程序
注意:如果在 catch 语句中声明的异常类是 Exception,catch 语句也能正确地捕获,这是因为
Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch
的参数为 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("发生了被 0 除:"+e);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界:"+e);
}
}
}
评论
查看更多