武汉科技大学 Java实验报告实验四Word格式文档下载.docx
《武汉科技大学 Java实验报告实验四Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《武汉科技大学 Java实验报告实验四Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
步骤(4):
在main方法中分别调用以上三个方法。
步骤(5):
将文件保存为TestException.java,然后编译、调试应用程序。
步骤(6):
将outofBound()方法中捕获异常的语句注释掉,重新编译程序,看看会不会有什么语法错误?
如果没错误,执行程序看结果有什么不同?
步骤(7):
将array方法重新定义为如下形式:
voidarraySize()throwsNegativeArraySizeException{……}
然后修改arraySize方法中捕获NegativeArraySizeException异常的语句执行部分。
程序代码:
publicclassTestException{
publicstaticvoidmain(String[]args){
arraySize();
outofBound();
nullPointer();
}
staticvoidarraySize()throwsNegativeArraySizeException{
try{
intArray[]=newint[-1];
}catch(NegativeArraySizeExceptione){
System.out.println("
数组大小异常:
"
+e);
}
staticvoidoutofBound()
{
try{
inti;
intArray[]=newint[3];
for(i=0;
i<
=3;
i++){Array[i]=i;
}catch(IndexOutOfBoundsExceptione){
System.out.println("
数据溢出:
}
staticvoidnullPointer(){
Strings;
inta;
s=null;
a=s.length();
}catch(NullPointerExceptione){
调用对象为空:
}
程序截图:
1、编写程序实现如下功能:
计算两个数之和,参与求和运算的每个数的值都必须在10-20之间,当任意一个数超出范围时,抛出自己的异常。
基于系统异常类Exception,定义自己的异常类NumberRangeException。
定义包含main方法的Application类SelfException。
在SelfException类中添加公共方法:
PublicstaticintselfExceptionTest
(intint1,intint2)throwsNumberRangeException使之能在求int1,int2两个数和之前检查两个数的数值范围,若符合条件则求和,否则抛出异常NumberRangeException。
在main方法中调用selfExceptionTest方法。
保存文件为SelfException.java,然后编译并调试程序。
修改main方法中调用selfExceptionTest方法的实参,看看程序的运行结果有什么不同。
classNumberRangeExceptionextendsException{
staticinta,b;
publicNumberRangeException(Stringmessage,inta,intb){
super(message);
this.a=a;
this.b=b;
publicclassSelfException{
publicstaticvoidselfExceptionTest(inta,intb)throwsNumberRangeException{
if((a<
10||a>
20)||(b<
10||b>
20))
{thrownewNumberRangeException("
数值超出指定范围"
a,b);
System.out.println("
a="
+a+"
"
+"
b="
+b+"
\n"
sum="
+(a+b));
publicvoidGetSum(){
try{selfExceptionTest(1,100);
}catch(NumberRangeExceptione){
System.out.println("
+NumberRangeException.a+"
b="
+NumberRangeException.b+"
+e"
);
}
publicstaticvoidmain(String[]args){
SelfExceptionnum=newSelfException();
num.GetSum();
(第一次设a=1,b=100;
第二次设a=15,b=15。
)
思考题:
1、翻译下列常用异常类的描述信息
OutOfMemoryError
Aclassinstancecreationexpression,arraycreationexpression,orstringconcatenationoperatiorexpressionthrowsanOutOfMemoryErrorifthereisinsufficientmemoryavailable.
如果没有足够的可用内存,一个类的实例创建表达式,数组创建表达式,或字符串串联操作表达会抛出一个OutOfMemoryError。
NegativeArraySizeException
AnarraycreationexpressionthrowsaNegativeArraySizeExceptionifthevalueofanydimensionexpressionislessthanzero.
一个数组创建表达式会抛出一个NegativeArraySizeException如果任何维度表达的数值小于零。
NullPointerException
AfieldaccessthrowsaNullPointerExceptionifthevalueoftheobjectreference
expressionisnull.
AmethodinvocationexpressionthatinvokesaninstancemethodthrowsaNullPointerExceptionifthetargetreferenceisnull.
AnarrayaccessthrowsaNullPointerExceptionifthevalueofthearrayreference
一个字段访问抛出NullPointerException如果对象的值引用表达式是null。
一个方法调用,调用一个实例方法表达抛出NullPointerException如果目标参考是null。
一个数组访问抛出NullPointerException如果值的数组引用表达式是null。
ArrayIndexOutOfBoundsException
AnarrayaccessthrowsanArrayIndexOutOfBoundsExceptionifthevalueofthearrayindexexpressionisnegativeorgreaterthanorequaltothelengthofthearray.
一个数组访问抛出一个ArrayIndexOutOfBoundsException如果值的数组索引表达式是负面的或大于或等于数组的长度。
ClassCastException
Throwntoindicatethatthecodehasattemptedtocastanobjecttoasubclassofwhichitisnotaninstance.Forexample,thefollowingcodegeneratesaClassCastException:
Objectx=newInteger(0);
System.out.println((String)x);
抛出指示代码试图创建一个对象的一个子类,它不是一个实例。
例如,下面的代码生成一个ClassCastException异常:
System.out.println((String)x)
ArithmeticException
Thrownwhenanexceptionalarithmeticconditionhasoccurred.Forexample,aninteger"
dividebyzero"
throwsaninstanceofthisclass.
一个非凡的算术条件时抛出发生。
例如,一个整数”除以零”抛出一个这个类的实例。
ArrayStoreException
AnassignmenttoanarraycomponentofreferencetypethrowsanArrayStoreExceptionwhenthevaluetobeassignedisnotcompatiblewiththecomponenttypeofthearray.
一个赋值数组组件的引用类型抛出一个ArrayStoreException当价值分配是不兼容的组件类型数组。
NoSuchFieldException
Signalsthattheclassdoesn'
thaveafieldofaspecifiedname.
提示:
在类中没有一个方法指定为该名称。
NoSuchMethodException
Thrownwhenaparticularmethodcannotbefound.
抛出它,当该方法不能被找到的时候。
NumberFormatException
Throwntoindicatethattheapplicationhasattemptedtoconvertastringtooneofthenumerictypes,butthatthestringdoesnothavetheappropriateformat.
抛出它,当确定应用程序试图将字符串转换成数值类型之一,但是,字符串没有适当
的格式。
FileNotFoundException
Signalsthatanattempttoopenthefiledenotedbyaspecifiedpathnamehasfailed.
试图打开文件,表明一个指定的路径名已经失败了。
IOException
SignalsthatanI/Oexceptionofsomesorthasoccurred.ThisclassisthegeneralclassofexceptionsproducedbyfailedorinterruptedI/Ooperations.
提示:
一个I/O信号发生某种异常。
这个类是一般类的异常产生的失败或中断I/O操作。
2、编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。
如果输入的参数个数为1、2、3则它们应分别对应正方形、长方形、三角形,如果参数值为0,则异常处理方法显示错误消息。
[提示]:
自己定义一个异常类,表示参数个数0这一异常。
然后定义一个抽象的父类,并提供一个抽象的方法area(),再派生出三个子类,重写area方法,最后在main方法中编写测试逻辑。
importjava.util.Scanner;
classMyExceptionextendsException{
publicvoidMyException(inti){
if(i==0){
输入出错!
!
请重新输入:
abstractclassarea{
abstractvoidarea();
classRectangleAreaextendsarea{
intarea(inta,intb){
intarea=a*b;
returnarea;
classSquareAreaextendsarea{
intarea(inta){
intarea=a*a;
voidarea(){}
classTriangleAreaextendsarea{
doublearea(inta,intb,intc){
doublep=0.5*(a+b+c);
doublearea=Math.sqrt(p*(p-a)*(p-b)*(p-c));
voidarea(){}
publicclassCountAreaextendsMyException{
staticinta,b,c,i;
staticints[]={a,b,c};
staticMyExceptionme=newMyException();
publicstaticvoidmain(Stringargs[])throwsMyException{
Scannersca=newScanner(System.in);
if(sca.equals(null)){
me.MyException(0);
else{while(true){
输入若干整数,用空格隔开,以Enter结束"
Stringnum=sca.nextLine();
num=num.toLowerCase();
if(num.equals("
Enter"
)){
break;
String[]strs=num.split("
i=strs.length;
if(i==1){
SquareAreasa=newSquareArea();
intarea=sa.area(Integer.parseInt(strs[0]));
System.out.println("
正方形面积为"
+area);
if(i==2){
RectangleAreara=newRectangleArea();
intarea=ra.area(Integer.parseInt(strs[0]),Integer.parseInt(strs[1]));
长方形面积为"
if(i==3){
TriangleAreata=newTriangleArea();
doublearea=ta.area(Integer.parseInt(strs[0]),Integer.parseInt(strs[1]),Integer.parseInt(strs[2]));
三角形面积为"
}
实验总结:
这一次实验与以往实验内容有很大的不同,先前三次实验都进行程序的编写,利用JAVA的一系列特点编写出要求的程序;
而此次JAVA实验是专门令程序逻辑错误,然后利用编写的异常类代码对异常进行抛出处理。
JAVA自带了许多异常类的代码,能否利用自身代码处理很多逻辑错误,所以此次实验并非和往常一样着重在方法的定义上面,而是更多在方法的调用上面。
另一方面,JAVA虽然自带了许多异常类,但是用户能够自行编写异常类和继承自带异常类然后进行扩展,这里再一次体现了JAVA程序的灵活。
通过上机,我熟悉了throw、try、catch等命令的使用,并且加深对异常处理的理解。
此次实验的思考题难度较大,翻译题在让我们熟悉JAVA异常命令的同时还检测了我们的英文水平,编程的思考题对我们JAVA水平提出了较高的要求,不仅涉及到类的继承、异常处理和累的具体化等内容,还涉及到键盘输入等以前不太了解的命令。