JAVA调试环境及异常处理程序.docx
《JAVA调试环境及异常处理程序.docx》由会员分享,可在线阅读,更多相关《JAVA调试环境及异常处理程序.docx(16页珍藏版)》请在冰点文库上搜索。
![JAVA调试环境及异常处理程序.docx](https://file1.bingdoc.com/fileroot1/2023-6/19/e4f6cb03-6047-412d-bb07-272ccff30011/e4f6cb03-6047-412d-bb07-272ccff300111.gif)
JAVA调试环境及异常处理程序
数学与计算科学学院
实验报告
实验项目名称JAVA调试环境及异常处理程序
所属课程名称面向对象技术
实验类型设计型
实验日期2014-4-1
班级信计12-2班
学号
姓名
成绩
一、实验概述:
【实验目的】
1.掌握Java的开发环境及基本知识;
2.掌握Java工程项目的基本建立过程和程序实现;
3.掌握Java程序的实现以及调试运行;
4.掌握Java程序中常见的异常处理;
5.识记类的结构;
6.掌握构造函数的基本形式;
7.掌握方法的基本形式;
8.识记Java类库中常见的异常类;
9.掌握Java类库中类的引用以及程序员自定义类。
【实验原理】
1.Java的工作原理
Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种Web应用。
同时,为了提高Java语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java具有其独特的工作原理。
2Applet的基本工作原理:
Applet是一种特殊的Java程序。
作为解释型语言,Java的字节码程序需要一个专门的解释器来执行它。
对于JavaApplication来说,这个解释器是独立的软件。
而对于JavaApplet来说,这个解释器就是Internet网的浏览器软件,或者更确切地,就是兼容JavaApplet的Internet浏览器。
图一:
Applet程序的生命周期和主要方法
2.Java虚拟机
Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼容地执行保存在.class文件中的字节码。
Java虚拟机的“机器码”保存在.class文件中,有时也可以称之为字节码文件。
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。
因此在运行时,Java源程序需要通过编译器编译成为.class文件。
Java虚拟机的建立需要针对不同的软硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。
由此在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上,在UNIX、Linux、Windows和部分实时操作系统上都可实现Java虚拟机。
3.Java字节码的执行需要经过以下3个步骤:
(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。
在此过程需要检验该类文件是否符合类文件规范。
(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。
(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。
【实验环境】
J++6.0
二、实验内容:
【实验方案】
实现对学生相关信息的抽象,实现学生相关信息的输入和输出。
1.建立学生个体的类classstudent,其中包括姓名、学号、年龄。
并在student中用voidsetId()方法实现学生学号的输入;用voidsetName()方法实现学生学号的录入;用pubilcStringtoString()法方将当前的Integer对象封装的int值转化成对应的字符形式。
2.建立主类classAA,并调用pubilcvoidinit()法方是想输入出界面的处理。
用publicvoidactionPerformed(ActionEvente)法方实现相关信息的界面显示。
【实验过程】(实验步骤、记录、数据、分析)
1.在桌面建立工程文件夹,并命名;
2.启动J++6.0开发软件,点解菜单栏“File—>NewFile”,在弹出的窗口中选择J++工程,并对该工程进行命名,将当前工程保存在上一步建立的文件夹下,点击“打开”;
3.在打开的J++6.0编辑窗口点击保存
按钮,在弹出的窗口中对程序文件进行命名,并且该文件名必须与主类名相同,即AA.java,然后保存在第二部建立的工程文件夹下。
4.接下来就是该工程源程序的编辑:
源代码:
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassLLLextendsAppletimplementsActionListener
{
Labelpr1,pr2;
TextFieldt1,t2;
Buttonb;
Students;
Stringmsg;
publicvoidinit()
{
pr1=newLabel("姓名:
");
pr2=newLabel("学号:
");
t1=newTextField(10);
t2=newTextField(20);
b=newButton("确定");
b.addActionListener(this);
add(pr1);add(t1);
add(pr2);add(t2);
add(b);
s=newStudent();
msg=s.toString();
}
publicvoidactionPerformed(ActionEvente)
{
s.setId(Integer.parseInt(t2.getText()));
s.setName(String.valueOf(t1.getText()));
msg=s.toString();
repaint();
}
publicvoidpaint(Graphicsg)
{
g.drawString(msg,120,120);
}
}
classStudent
{
Stringname="某某";
intid=11111111;
intage=0;
voidsetId(intx)
{
id=x;
}
voidsetName(Stringy)
{
name=y;
}
publicStringtoString()
{
return"姓名:
"+name+"\n"+"学号:
"+id+"\n"+"年龄:
"+age;
}
}
5.以上程序的运行结果显然和现实情况有所不同,比如:
在学生学号栏出入:
-12345,程序也同样输出-12345;而当输入的学号过长,如:
123456789010111213时,程序也无任何反应;同样输入KKKK也没有任何反应。
6.基于上述存在的问题,显然是程序本身不够健壮,即对输入的合法性不能做出相应的判断以及给出相应的提示。
这将会给用户增加困扰。
为此我们在该基础上进行程序优化,解决上述出现的问题。
7.分析上述程序,易知,程序缺少对输入字符进行判断的语句块。
为此:
我们应用Java提供的异常处理进行程序优化,使之具备强壮性。
首先我们应该理解异常及异常抛出。
异常抛出:
指Java程序在运行时如果引发了一个可识别的错误,就会产生一个与该错误相对应的异常类的对象,这个过程被称为异常的抛出。
分析源代码:
publicvoidactionPerformed(ActionEvente)
{
s.setId(Integer.parseInt(t2.getText()));
s.setName(String.valueOf(t1.getText()));
msg=s.toString();
……
}
发现在学号转化输出语句:
“s.setId(Integer.parseInt(t2.getText()));”执行时,会出现字符串转换为数字异常(NumberFormatException)。
为此,利用异常处理对该异常进行处理,将程序改为:
publicvoidactionPerformed(ActionEvente)
{
try
{
s.setId(Integer.parseInt(t2.getText()));
s.setName(String.valueOf(t1.getText()));
msg=s.toString();
}
catch(NumberFormatExceptionee)
{
msg="亲,学号必须是整数哦!
!
";
}
这样程序将会对输入的字符进行相应的处理,带输入的字符长不是纯数字字符串时,将会抛出异常,将由catch捕获,并进行相应的处理。
对于输入如:
-12345或者过长12345678910111213…等等。
由于Java没有提供相应的异常类,我们需要自己定义相应的异常类来进行处理。
程序员定义异常类时,一般需完成如下工作:
1.声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或程序员定义的异常类为父类。
2.为新的异常类定义属性和方法,或重载父类的属性或方法,使这些属性和法方能够体现该类所对应的错误的信息。
为此,我们将重新定义一个异常类:
classAAextendsException
{
}
在定义了该异常类后,将程序中学号输入方法改为:
voidsetId(intx)throwsAA
{
if(10000000{
id=x;
}
elsethrownewAA();
}
在以上工作完成后,程序将改为:
publicvoidactionPerformed(ActionEvente)
{
try
{
s.setId(Integer.parseInt(t2.getText()));
s.setName(String.valueOf(t1.getText()));
msg=s.toString();
}
catch(AArr)
{
msg="亲,学号必须是八位正整数哦!
!
";
}
通过应用J++6.0中异常类处理功能,上述程序将具备了一定的强壮性。
能对输入的字符长进行合法性的判断,并做出相应的判断和提示。
注:
J++6.0中,常见的异常类:
算术异常类:
ArithmeticExecption
空指针异常类:
NullPointerException
类型强制转换异常:
ClassCastException
数组负下标异常:
NegativeArrayException
数组下标越界异常:
ArrayIndexOutOfBoundsException
违背安全原则异常:
SecturityException
文件已结束异常:
EOFException
文件未找到异常:
FileNotFoundException
字符串转换为数字异常:
NumberFormatException
操作数据库异常:
SQLException
输入输出异常:
IOException
方法未找到异常:
NoSuchMethodException
【实验结论】(结果)
对程序进行数据测试:
1.登录界面:
2.数据测试(学号为空)
3.数据测试(学号长度不合法)
4.数据测试(学号为负)
5.数据测试(正确输入)
【实验小结】(收获体会)
通过该Java程序的设计,使我明白并且掌握了软件开发的基本过程。
同时也让我对该课程有了更为深入的了解,对于J++6.0的运行环境以及程序编辑、调试、测试的有关步骤有了更加深刻的体会。
最主要的是培养了我对该门课程的兴趣。
如:
对Applet的异常处理,让我明白了一个程序要做到十全十美是基本不可能的事情,我们只能做到更好,永远不能做到最好。
这要求我们对设计一个程序,应该站在用户的角度来审视这个程序的适用性和操作简单性。
三、指导教师评语及成绩:
评语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成绩:
指导教师签名:
批阅日期:
附录1:
源程序
源代码:
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassLLLextendsAppletimplementsActionListener
{
Labelpr1,pr2;
TextFieldt1,t2;
Buttonb;
Students;
Stringmsg;
publicvoidinit()
{
pr1=newLabel("姓名:
");
pr2=newLabel("学号:
");
t1=newTextField(10);
t2=newTextField(20);
b=newButton("确定");
b.addActionListener(this);
add(pr1);add(t1);
add(pr2);add(t2);
add(b);
s=newStudent();
msg=s.toString();
}
publicvoidactionPerformed(ActionEvente)
{
try
{
s.setId(Integer.parseInt(t2.getText()));
s.setName(String.valueOf(t1.getText()));
msg=s.toString();
}
catch(NumberFormatExceptionee)
{
msg="亲,学号必须是整数哦!
!
";
}
catch(AArr)
{
msg="亲,学号必须是八位正整数哦!
!
";
}
repaint();
}
publicvoidpaint(Graphicsg)
{
g.drawString(msg,120,120);
}
}
classStudent
{
Stringname="某某";
intid=11111111;
intage=0;
voidsetId(intx)throwsAA
{
if(10000000{
id=x;
}
elsethrownewAA();
}
voidsetName(Stringy)
{
name=y;
}
publicStringtoString()
{
return"姓名:
"+name+"\n"+"学号:
"+id+"\n"+"年龄:
"+age;
}
}
classAAextendsException
{
}
附录2:
实验报告填写说明
1.实验项目名称:
要求与实验教学大纲一致.
2.实验目的:
目的要明确,要抓住重点,符合实验教学大纲要求.
3.实验原理:
简要说明本实验项目所涉及的理论知识.
4.实验环境:
实验用的软、硬件环境.
5.实验方案(思路、步骤和方法等):
这是实验报告极其重要的内容.概括整个实验过程.
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作.对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明.对于创新性实验,还应注明其创新点、特色.
6.实验过程(实验中涉及的记录、数据、分析):
写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析.
7.实验结论(结果):
根据实验过程中得到的结果,做出结论.
8.实验小结:
本次实验心得体会、思考和建议.
9.指导教师评语及成绩:
指导教师依据学生的实际报告内容,给出本次实验报告的评价.