JAVA程序设计实验报告Word格式文档下载.docx
《JAVA程序设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《JAVA程序设计实验报告Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
//Interfaceclass.classx=newInterfaceclass.class();
不能对接口进行实例化
UseInterfacex=newUseInterface();
x.func1();
x.func2(k);
⒉多态在工资系统中的应用
下面给出一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。
Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。
该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。
对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Earnings()派出生的。
所有在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。
为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引导并调用earnings()方法。
在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。
程序依次使用数组的每个元素(Employee引用)调用每个对象的employee()方法。
(1)编辑Test.java,设保存在D:
abstractclassEmployee
{
privateStringfirstName;
privateStringlastName;
publicEmployee(Stringfirst,Stringlast)
firstName=first;
lastName=last;
}
publicStringgetEmployeeName()
returnfirstName;
publicStringgetLastName()
returnlastName;
publicStringtoString()
returnfirstName+lastName;
publicabstractStringearnings();
//定义Boss类,为Employee的子类
finalclassBossextendsEmployee
privatedoubleweeklySalary;
publicBoss(Stringfrist,Stringlast,doubles)
super(frist,last);
setWeeklySalary(s);
publicvoidsetWeeklySalary(doubles)
weeklySalary=(s>
0?
s:
0);
publicStringearnings()
return"
Boss"
+super.toString();
//定义CommissiomWorker类,为Employee的子类
finalclassCommissionWorkerextendsEmployee
privatedoublesalary;
privatedoublecommission;
privateintquantity;
publicCommissionWorker(Stringfirst,Stringlast,doubles,doublec,intq)
super(first,last);
setSalary(s);
setCommission(c);
setQusntily(q);
/*publicStringearnings()
}*/
publicvoidsetQusntily(doubles)
salary=(s>
publicdoublesetCommission(doublec)
returncommission=(c>
c:
doublei=salary+commission+quantity;
returnDouble.valueOf(i).toString();
publicStringtoString()
return"
CommissionWorker"
publicvoidsetSalary(doubles)
salary=s;
//定义PieceWorker类,为Employee的子类
finalclassPieceWorkerextendsEmployee
privatedoublewagePiece;
privateintquantity;
publicPieceWorker(Stringfirst,Stringlast,doublew,intq)
setWage(w);
setQuantity(q);
publicvoidsetWage(doublew)
wagePiece=(w>
w:
publicdoublesetQuantity(intq)
returnq+wagePiece;
return"
PieceWoeker"
returnDouble.valueOf(wagePiece+quantity).toString();
//定义HourlyWorker类,为Employee的子类
classHourlyWorkerextendsEmployee
privatedoublewage;
privatedoublehours;
publicHourlyWorker(Stringfirst,Stringlast,doublew,doubleh)
setHours(h);
publicvoidsetWage(doublew)
wage=(w>
publicvoidsetHours(doubleh)
hours=(h>
=0&
&
h<
168?
h:
publicStringearnings()
HourlyWorker"
classText
publicstaticvoidmain(Stringargs[])
//使用超类声明ref
Employeeref;
Stringout="
"
;
//分别定义各子类
Bossb=newBoss("
Hohn"
"
Smith"
800.00);
CommissionWorkerc=newCommissionWorker("
Sue"
Hones"
400.00,3.0,150);
PieceWorkerp=newPieceWorker("
Bob"
Lewis"
2.5,200);
HourlyWorkerh=newHourlyWorker("
Karen"
price"
13.75,40);
//使用子类分别实例化
ref=b;
out+=ref.toString()+"
earned$"
+ref.earnings()+"
\n"
+b.toString()+"
+b.earnings()+"
System.out.print(out);
ref=c;
+c.toString()+"
+c.earnings()+"
ref=p;
+p.toString()+"
+p.earnings()+"
ref=h;
+h.toString()+"
+h.earnings()+"
⒊包的建立与使用
(1)编辑Calculate.java,设保存在D:
packagemypackage;
publicclassCalculate
privateinta;
publicCalculate(inta)
{this.a=a;
fromconstrartion"
+this.a);
publicdoublevolume(doubleheight,doublewidth,doubledepth)
returnheight*width*depth;
intadd(intx,inty)
returnx+y;
protectedvoida()
System.out.println("
fromconstration"
+a);
编译,查看D:
\myjava目录下是否生成了myoackage文件夹,在该文件夹中是否有Calculate.class文件。
(2)编辑Interfaceclass.java,设保存在D:
importmypackage.Calculate;
classPackageDemo
publicstaticvoidmain(stringags[])
Calculatec=newCalculate(10);
doubles=c.volume(5,6,7);
System.out.println(s);
//intb=c.add(5,6);
//c.a();
五、实验结果
实验二、异常处理实验
一、实验目的
⒈异常的生产及捕获
⒉自定义异常及其使用
面向对象的基本知识
⒈异常的捕获
计算两数相除并输出结果。
使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。
编辑Ex1.java,保存在D:
myjava目录下。
importjava.io.*;
classEx1
publicstaticvoidmain(Stringargs[])
try{
BufferedReaderstrin=newBufferedReader(
newInputStreamReader(System.in));
System.out.print("
请输入除数:
);
Stringcl=strin.readLine();
inta=Integer.parseInt(cl);
System.out.print("
请输入被除数:
cl=strin.readLine();
intb=Integer.parseInt(cl);
intc=b/a;
System.out.println("
商为:
+c);
//捕获与I/O有关的异常
catch(IOExceptione){e.printStackTrace();
//捕获数值转化时的异常,如不能将字符转化成数值
catch(NumberFormatExceptione){
请输入整数!
//e.printStackTrace();
//捕获除数为0的异常
catch(ArithmeticExceptione){
除数不可以0!
//e.printstackTrace();
编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。
⒉定义异常
编写程序包含自定义异常,当输入数值为13和4时抛出该异常。
编辑Ex2.java,设保存在D:
classEx2extendsException
Ex2(Stringmsg)
super(msg);
classMyEx
privateintx;
voidsetX(intx)
this.x=x;
voidf1()throwsEx2
if(x==13)
thrownewEx2("
Idon'
tlike13!
elseif(x==4)
tlike4!
else
System.out.println(100/x);
MyExa=newMyEx();
try
a.setX(5);
//a.setX(13);
//a.setX(4);
//a.setX(0);
a.f1();
catch(Exceptione)
getmessage:
+e.getMessage());
编译并运行,分别取消注释上面程序中被注释的语句。
当释放a.setX(13)语句后,查看运行结果,当释放a.setX(4)语句后,查看运行结果。
实验三、GUI(图形用户接口)实验
⒈掌握用MouseListener和MouseMotionListener接口处处理鼠标事件MouseEvent的方法。
⒉掌握制作菜单及处理菜单事件的方法
⒊掌握创建对话框及定位、显示、激活和关闭对话框的方法
图形用户接口编程所需的基本类及使用方法
⒈制作一个简单的画板
编辑Mou.java,设保存在D:
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassMouextendsAppletimplementsMouseMotionListener
intx=-1,y=-1;
publicvoidinit()
setBackground(Color.cyan);
addMouseMotionListener(this);
publicvoidpaint(Graphicsg)
if(x!
=-1&
y!
=-1)
g.setColor(Color.red);
g.drawLine(x,y,x,y);
publicvoidmouseDragged(MouseEvente)
x=(int)e.getX();
y=(int)e.getY();
publicvoidmouseMoved(MouseEvente){}//由于使用的是Listener,需要将其他不重载的方//法,列举在这里
publicvoidupdate(Graphicsg)
paint(g);
publicstaticvoidmain(String[]args)
Moumou=newMou();
mou.setVisible(true);
mou.init();
mou.paint()
编译并运行查看结果.
⒉菜单的编写
编辑TestMenu.java,设保存在D:
importjava.awt.event.ItemEvent;
classMyMenhFrameextendsFrameimplementsActionListener,ItemListener
MenuBarm_MenuBar;
MenumenuFile,menuEdit,m_Edit_Paste;
MenuItemmi_File_Open,mi_File_Close,mi_File_Exit,mi_Edit_Copy;
MenuItempi_New,pi_Del,pi_Pro,mi_Paste_All,mi_Paste_Part;
CheckboxMenuItemmi_Edit_Cut;
PopupMenupopM;
TextAreata;
publicvoiditemStateChanged(ItemEvente)
MyMenhFrame()
super("
拥有菜单的窗口"
//指定窗口标题
ta=newTextArea("
nochoice"
5,20);
ta.addMouseListener(newHandleMouse(this));
//文本域响应鼠标事件
add("
Center"
ta);
//创建弹出式菜单
popM=newPopupMenu();
pi_New=newMenuItem("
新建"
pi_New.addActionListener(this);
popM.add(pi_New);
pi_Del=newMenuItem("
删除"
pi_Del.addActionListener(this);
popM.add(pi_Del);
pi_Pro=newMenuItem("
属性"
pi_Pro.addActionListener(this);
popM.add(pi_Pro);
//将弹出式菜单加在文本域上
ta.add(popM);
m_MenuBar=newMenuBar();
//创建菜单栏
menuFile=newMenu("
文件"
//创建菜单项、菜单自项并指定快捷键
mi_File_Open=newMenuItem("
打开"
newMenuShortcut('
o'
));
mi_File_Close=newMenuItem("
关闭"
mi_File_Exit=newMenuItem("
退出"
mi_File_Exit.setShortcut(newMenuShortcut('
x'
mi_File_Open.setActionCommand("
mi_File_Close.setActionCommand("
mi_File_Open.addActionListener(this);
mi_File_Close.addActionListener(this);
//自身作为监视器
mi_File_Exit.addActionListener(this);
menuFile.add(mi_File_Open);
menuFile.add(mi_File_Close);
menuFile.addSeparator();
menuFile.add(mi_File_Exit);
m_MenuBar.add(menuFile);
menuEdit=newMenu("
编辑"
mi_Edit_Copy=newMenuItem("
复制"
mi_Edit_Cut=newCheckboxMenuItem("
剪切"
m_Edit_Paste=newMenu("
粘贴"
mi_Paste_All=newMenuItem("
全部粘贴"
mi_Paste_Part=newMenuItem("
部分粘贴"
mi_Edit_Copy.addActionListener(this);
mi_Edit_Cut.addItemListener(this);