实验报告
课程名称: Java程序设计成绩评定:
实验项目名称:接口、泛型、枚举、内部类与异常指导教师:
学生姓名:学号:专业班级:
实验项目类型:基础实验地点:实验时间:
一、实验目的与要求:
1、理解接口的定义与实现;
2、知道泛型、枚举型与内部类的基本应用;
3、掌握常用异常的抛出与捕获及处理.
二、实验环境:(硬件环境、软件环境)
1.硬件环境:奔ⅣPC。
2.软件环境:Windows XP 操作系统,JDK6.0。
三、实验内容:(原理、操作步骤、程序代码等)
任务:
1、按照要求完成下述接口及实现类的程序
1)定义名称为PCI()的接口,包括启动的方法start和关闭的方法stop;
2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start
方法时输出“sending data……”,在实现stop方法时输出“network stop.”
3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start
方法时输出“dudu……”,在实现stop方法时输出“sound stop.”
4)定义名称为MainBoard 的类表示主板,包含方法public void usePCICard(PCI
p),在方法体内通过p来启动和关闭组件;
5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对
象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个
SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声
卡和网卡。
2、泛型类程序的调试
调试教材P165的程序8-2,写出程序运行结果,理解泛型类的工作机理及应用。
3、调试运行内部类程序:
在类内部再定义另外一个类,这个另外定义的类就叫内部类。
调试教材P171-172程序8-3,写出程序运行结果,理解内部类的定义方法与应用。
4、异常抛出与捕获编程与调试
先调试教材P182、183中的程序9-2和9-3,写出调试结果。
然后,自己编写一个能抛出并捕获、处理NullPointerException、NumberFormanException多异常的程序,并调试后写出运行结果。
具体操作步骤及程序代码为:
1.
interface PCI{
public void start();
public void stop();
}
class NetworkCard implements PCI{
public void start(){
System.out.println("sending data......"); }
public void stop(){
System.out.println("network stop."); }
}
class SoundCard implements PCI{
public void start(){
System.out.println("dudu......");
}
public void stop(){
System.out.println("sound stop.");
}
}
public class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
public static void main(String[] args){
NetworkCard nc=new NetworkCard();
SoundCard sc=new SoundCard();
MainBoard mb=new MainBoard();
ePCICard(nc);
ePCICard(sc);
}
}
2.public class GenericPool<T>{
private Object[] objArray;
private int headLoc;
private int tailLoc;
public GenericPool(int length){
objArray=new Object[10];
headLoc=-1;
tailLoc=-1;
}
public T get(){
Object result=null;
int idx=(headLoc+1)%objArray.length;
if(objArray[idx]!=null){
result=objArray[idx];
objArray[idx]=null;
headLoc++;
}
return (T)result;
}
public int add(T o){
int ins=(tailLoc+1)%objArray.length;
if(objArray[ins]!=null){
return -1;
}
objArray[ins]=o;
tailLoc=ins;
return ins;
}
public static void main(String[] args){
GenericPool<String>pool=new GenericPool<String>(2);
System.out.println(pool.add("1"));
String x=pool.get();
System.out.println(x);
System.out.println(pool.add("2"));
}
}
3.public class OutClass{
private String name;
private String state;
public OutClass(String name,String state){
super();
=name;
this.state=state;
}
private void say(){
System.out.println("外部"+name+"的状态是"+state);
}
public class InnerClass{
public void alarm(){
System.out.println("内部:"+name+"的状态是"+state);
say();
}
}
public static void main(String[] args){
OutClass Outer=new OutClass("冰箱","完好");
OutClass.InnerClass inner=Outer.new InnerClass();
inner.alarm();
}
}
4.p182 9-2的运行结果为:
D:\Java>java Summer2
不能给我一个null的参数!
P183 9-3 的运行结果为:
D:\Java>java Summer3
也不能给我一个不是数值型的参数!
sum=0
public class BuHuo{
public static int sum(String a,String b){
int sum=0,x=0,y=0;
try{
a.trim();
b.trim();
x=Integer.parseInt(a);
y=Integer.parseInt(b);
sum=x+y;
}catch(NullPointerException e){
System.out.println("不能给我一个null的参数!");
}catch(NumberFormatException e){
System.out.println("不能给我一个不是数值型的字符串参数!");
}
return sum;
}
public static void main(String[] args){
int result=sum("ab",null);
System.out.println("sum="+result);
}
}
四、实验体会(实验中碰到的问题及解决方法等)
1、知道了接口该如何定义和如何使用接口。
2、学会了枚举类的定义和使用,掌握了内部类的定义和使用方法。
3、能正确区分异常和错误,掌握了将可能发生异常的语句放在try{}catch(){}代码块中,来确保异常发生时能够得到捕获,并学会了自定义异常。
4、理解题目容易,自己写比较难,往往会遇到一些问题很难得到解决。
如:找不到符号是什么愿意导致,当定义一个方法为public时,有时程序会出错,而删除时程序能正常运行的原因。
5、将可能发生异常的语句放在try{}还不能很好的理解,如:对输入值的判断,不知道该把那句放在try中。