实验二 泛型异常处理 实验报告
- 格式:docx
- 大小:66.30 KB
- 文档页数:4
JAVA实验报告5异常处理实验异常处理是Java程序设计中非常重要的一部分,能够有效地处理程序在运行过程中可能出现的异常情况。
在本次实验中,我们主要学习了Java中的异常处理机制,并对其进行了实践。
一、实验目的:1、学习Java中的异常处理机制;2、掌握如何使用try-catch来处理异常;3、了解Java中常见的异常类和异常处理语句的使用方法。
二、实验内容:1、编写一个Java程序,在程序中故意引发一个异常,然后使用try-catch语句来处理该异常,并在catch块中打印异常的详细信息;2、使用多个catch块来处理不同类型的异常,并在每个catch块中打印对应异常的详细信息;3、使用finally块来执行一些必须要执行的代码,比如关闭文件等。
三、实验步骤:1、首先,我们编写一个简单的Java程序,使用try-catch语句来处理异常。
假设我们在程序中故意除以0,然后在catch块中打印出异常信息。
代码如下:```public class ExceptionHandlingDemopublic static void main(String[] args)tryint result = 10 / 0;} catch (ArithmeticException e)System.out.println("发生异常:" + e);}}```2、接下来,我们使用多个catch块来处理不同类型的异常。
假设我们在程序中使用一个空数组,然后尝试访问数组的第一个元素。
如果数组为空,则会抛出ArrayIndexOutOfBoundsException异常。
代码如下:```public class ExceptionHandlingDemopublic static void main(String[] args)int[] array = new int[0];tryint firstElement = array[0];} catch (ArrayIndexOutOfBoundsException e)System.out.println("发生异常:" + e);} catch (Exception e)System.out.println("未知异常:" + e);}}```3、最后,我们使用finally块来执行一些必须要执行的代码。
实验报告课程名称: 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(PCIp),在方法体内通过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,写出调试结果。
盛年不重来,一日难再晨。
及时宜自勉,岁月不待人。
甘肃政法学院
本科生实验报告
(二)
姓名:
学院:
专业:
班级:
实验课程名称:JavaSE程序设计
实验日期:2014年4月16日
指导教师及职称:
实验成绩:
开课时间:2014——2015学年第1学期
甘肃政法学院实验管理中心印制
}
System.out.printf("将%s替换为202.192.78.56\n",IP);
String result = matcher.replaceAll("202.192.78.56"); System.out.println(result);
}
}
四、实验过程与分析
实验的运行结果如下:
1.
2.
3.
4.
5.
6.
五、实验总结
1.Java语言也需要多写多练,在错误中不断丰富自己的经验,在不断
的练习下,不仅可以熟悉Java程序,也能很好的去尝试编写自己的Java程序。
2.在本次实验中,确实或多或少也遇到了一些问题,有的自己能独
立解决,但是有的在自己有限的能力范围内,还是没有很好的解决,例如第6小题的实验,结果是这样的:。
异常处理程序设计训练一实验目的●使学生理解C++中的异常处理机制;●使学生掌握异常处理的定义和执行过程;二实验环境●所需硬件环境为微机;●所需软件环境为Microsoft Visual C++ 6.0或Code::Blocks ;三实验内容(二)、基于(一)中的Cexception类设计带异常处理的求一元二次方程的根的程序QJ.h#ifndef QJ_H#define QJ_Hclass QJ{public:QJ(int a=0,int b=0,int c=0);int get1();int get2();int get3();protected:int a1,b1,c1;};#include "QJ.cpp"#endifQJ.cpp#include<iostream.h>#include"QJ.h"QJ::QJ(int a,int b,int c) {a1=a;b1=b;c1=c;}int QJ::get1(){return a1;}int QJ::get2(){return b1;}int QJ::get3(){return c1;}Text3_1.cpp#include<iostream.h> #include<math.h>#include "QJ.h"int f(int a,int b,int c) {int t,y;if(a==0){throw 0;}t=b*b-4*a*c;if(t<0){throw 'e';}if(t==0){cout<<a<<"x2+"<<b<<"x+"<<c<<"的解为"<<(-b/(2*a))<<endl;}if(t>0){cout<<a<<"x2+"<<b<<"x+"<<c<<"的解为"<<(-b+sqrt(t))/(2*a)<<'\t'<<(-b-sqrt(t))/(2*a)<<endl;}}int main(){QJ c1(0,1,2),c2(1,2,3),c3(1,2,1),c4(1,5,6);try{f(c1.get1(),c1.get2(),c1.get3());}catch(int){cout<<"二次项系数不能为0"<<endl;}catch(char a){cout<<"判别式应>=0"<<endl;}try{f(c3.get1(),c3.get2(),c3.get3());f(c4.get1(),c4.get2(),c4.get3());f(c2.get1(),c2.get2(),c2.get3());}catch(int){cout<<"二次项系数不能为0"<<endl;}catch(char a){cout<<"判别式应>=0"<<endl;}return 0;}(三)、基于(一)中的Cexception类设计并实现日期类CDate Date.h#ifndef Date_H#define Date_Hclass Date{public:Date(int yearv=0,int monthv=0,int dayv=0);void set1(int yearv);void set2(int monthv);void set3(int dayv);int get1();int get2();int get3();void show();protected:int year,month,day;};#include "Date.cpp"#endifDate.cpp#include "Date.h"Date::Date(int yearv,int monthv,int dayv) {year=yearv;month=monthv;day=dayv;}void Date::set1(int yearv){year=yearv;}void Date::set2(int monthv){month=monthv;}void Date::set3(int dayv){day=dayv;}int Date::get1(){return year;}int Date::get2(){return month;}int Date::get3(){return day;}void Date::show(){cout<<year<<"."<<month<<"."<<day<<endl;}Text3_2.cpp#include<iostream.h>#include "Date.h"int f(int a,int b,int c){intc1[12]={31,28,31,30,31,30,31,31,30,31,30,31},c2[12]={31,29,31,30,31,30,31,31,30,3 1,30,31};if(a%400==0){for(int i=1;i<=12;i++){if(i==b){if(c>c2[i-1]){throw c;}}}}else{for(int i=1;i<=12;i++){if(i==b){if(c>c1[i-1]){throw c;}}}}}int main(){Date a(2012,2,6),b(2000,2,29),c(1995,2,29);try{f(a.get1(),a.get2(),a.get3());a.show();f(b.get1(),b.get2(),b.get3());b.show();f(c.get1(),c.get2(),c.get3());c.show();}catch(int){cout<<"日期输入错误"<<endl;}return 0;}四实验分析及问题思考此部分写出对实验程序运行情况作分析,如程序未能通过,应分析错误原因;以及实验内容中要求的思考问题的解答;参考实验,这俩个难度不是很大,但这个检测也是比较简单的。
python异常处理结构与程序调试实验报告Python异常处理结构与程序调试实验报告1. 起因在程序设计和开发过程中,我们经常需要处理各种各样的异常情况,比如用户输入错误、文件读取失败、网络连接中断等。
在Python中,异常处理结构是非常重要的一部分,它可以帮助我们优雅地应对各种异常情况,并且提高程序的稳定性和可靠性。
本次实验报告将围绕Python异常处理结构与程序调试展开,深入探讨异常处理的原理、技巧和最佳实践,以及程序调试的方法和工具。
2. Python异常处理结构在Python中,异常处理结构由try、except、else和finally等关键字组成。
当程序出现异常时,会先执行try语句块中的代码,如果出现异常则会跳转到对应的except语句块进行处理,如果没有异常则会执行else语句块,最后不管是否出现异常都会执行finally语句块。
这种结构使得我们可以根据具体情况灵活地处理异常,并且可以保证资源的及时释放。
3. 异常处理的技巧和最佳实践在实际编码中,我们需要根据具体的异常情况来选择合适的处理方式,比如捕获特定类型的异常、重新抛出异常、自定义异常类等。
另外,我们还可以利用日志系统来记录异常信息,以便进行错误定位和排查。
良好的异常处理实践还包括对异常的预防和测试、对异常处理代码的封装和重用等方面。
4. 程序调试的方法和工具除了异常处理,程序调试也是程序开发过程中不可或缺的一环。
Python提供了丰富的调试工具,比如pdb、pycharm等,可以帮助我们逐行调试、查看变量状态、跟踪函数调用等。
合理利用断言和日志输出也是调试的有效手段,能够帮助我们及时发现程序中的问题并进行修复。
5. 个人观点和理解作为一个程序员,我认为异常处理和程序调试是编程中必不可少的技能和工作,它们可以帮助我们编写更加健壮和可靠的程序。
在实践中,我们应该注重异常处理代码的健壮性和可读性,避免滥用try-except结构,合理利用日志系统,以及充分利用调试工具来提高工作效率。
java异常处理实验报告Java异常处理实验报告一、实验目的本次实验旨在通过编写Java程序,学习和掌握异常处理的相关知识和技巧,提高代码的健壮性和可靠性。
二、实验环境本次实验使用的开发环境为Eclipse,使用Java语言进行编程。
三、实验内容1. 异常的概念异常是指程序在运行过程中出现的意外情况,例如除零错误、数组越界等。
Java中的异常是以类的形式存在的,所有异常类都是Throwable类的子类。
2. 异常处理的方法Java提供了try-catch-finally语句用于处理异常。
在try块中编写可能会抛出异常的代码,如果发生异常,则会跳转到对应的catch块进行处理。
finally块中的代码无论是否发生异常都会被执行。
3. 异常的分类Java中的异常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常需要在代码中显式地进行处理,否则编译器会报错;而非受检异常不需要强制处理。
4. 自定义异常除了使用Java提供的异常类,我们还可以根据需要自定义异常类。
自定义异常类需要继承Exception类或RuntimeException类,并重写相应的方法。
5. 异常处理的最佳实践在实际的软件开发中,异常处理是非常重要的一部分。
以下是一些异常处理的最佳实践:- 尽早捕获异常:在代码中尽量早地捕获异常,以避免异常的传播和影响其他部分的代码。
- 适当处理异常:根据具体情况,选择合适的处理方式,可以是打印日志、返回默认值、抛出新的异常等。
- 避免捕获过宽的异常:捕获异常时要尽量精确,避免捕获过宽的异常类型,以免屏蔽了真正的问题。
四、实验步骤1. 创建一个Java项目,并新建一个类用于实现异常处理的实验。
2. 编写代码,在try块中编写可能会抛出异常的代码。
3. 使用catch块捕获异常,并进行相应的处理,例如打印异常信息。
4. 在finally块中编写必要的代码,例如资源的释放。
java异常处理实验报告Java异常处理实验报告引言:异常处理是Java编程中非常重要的一部分,它能够帮助我们优雅地处理程序中可能出现的错误情况,提高程序的健壮性和稳定性。
本实验旨在通过编写一段简单的Java代码,来探索异常处理的机制和应用。
实验过程:在实验中,我们编写了一个简单的Java程序,用于模拟一个学生信息管理系统。
该程序包含了以下几个功能:添加学生信息、查询学生信息、删除学生信息和修改学生信息。
在每个功能中,我们故意引入了一些可能导致异常的情况,以便验证异常处理的效果。
首先,我们创建了一个名为"Student"的类,用于表示学生的信息。
该类包含了学生的姓名、年龄和成绩等属性,并提供了相应的getter和setter方法。
接着,我们创建了一个名为"StudentManagementSystem"的类,用于实现学生信息的管理功能。
在添加学生信息的功能中,我们通过捕获可能抛出的"NullPointerException"异常来处理可能出现的空指针异常。
当用户输入的学生信息为空时,程序将抛出该异常并给出相应的提示信息,避免程序崩溃。
在查询学生信息的功能中,我们通过捕获可能抛出的"IndexOutOfBoundsException"异常来处理可能出现的数组越界异常。
当用户输入的学生索引超出了学生信息数组的范围时,程序将抛出该异常并给出相应的提示信息,避免程序崩溃。
在删除学生信息的功能中,我们通过捕获可能抛出的"NumberFormatException"异常来处理可能出现的数字格式异常。
当用户输入的学生索引不是一个合法的数字时,程序将抛出该异常并给出相应的提示信息,避免程序崩溃。
在修改学生信息的功能中,我们通过捕获可能抛出的"InputMismatchException"异常来处理可能出现的输入不匹配异常。
java异常处理实验结论-回复【java异常处理实验结论】在开发过程中,异常处理是一个至关重要的问题。
异常处理允许开发者在程序运行过程中,捕获并处理潜在的错误情况,以避免程序的崩溃或异常行为。
本文将通过实验探讨Java中异常处理的相关原理和方法,并总结实验结论。
首先,我们需要了解异常是什么。
在Java中,异常是指在程序运行过程中可能发生的错误或异常情况。
这些错误或异常情况可能是由于外部因素(如网络连接问题)、程序逻辑错误或用户输入不合法等原因引起的。
异常通过抛出和捕获机制来处理。
Java提供了一套完整的异常处理机制,以帮助开发人员捕获和处理异常。
异常处理的主要目标是提供一种对错误情况进行处理的方法,从而避免程序的崩溃或异常行为。
异常处理的主要思想是,在程序中进行适当的异常捕获,然后根据具体情况给予合适的处理和反馈。
为了更好地理解Java异常处理机制,我们进行了一系列的实验。
在实验中,我们模拟了几种常见的异常情况,并使用Java异常处理机制进行了处理。
实验的目的是验证Java异常处理机制的可行性和有效性。
实验一:ArithmeticException异常处理在该实验中,我们模拟了一个除零异常的情况。
在Java中,当一个数字尝试除以0时,会抛出ArithmeticException异常。
为了处理这种异常,我们使用了try-catch块来捕获该异常,并对异常进行了相应的处理。
实验结果表明,通过使用try-catch块来捕获ArithmeticException异常,我们能够有效地处理该异常,并避免程序的崩溃。
实验表明,Java 异常处理机制的确具有良好的可行性和有效性。
实验二:ArrayIndexOutOfBoundsException异常处理在该实验中,我们模拟了一个数组越界的异常情况。
在Java中,当我们尝试访问数组中不存在的索引时,会抛出ArrayIndexOutOfBoundsException异常。
java异常处理实验总结
在这个实验中,我们学习了Java中的异常处理机制。
异常是在程序执行过程中发生的错误或异常情况,例如除以零、数组越界等。
在Java中,异常被分为两种类型:受检异常和非受检异常。
受检异常是在代码中显式声明并处理的异常,需要在方法签名中声明并在方法体中捕获或抛出。
这样做是为了确保开发人员在编写代码时考虑到了可能发生的异常情况,并处理它们。
受检异常的处理方式包括捕获和处理异常、向调用方法抛出异常或者使用try-catch-finally语句块处理异常。
非受检异常是指那些不需要在代码中显式声明和捕获的异常,通常是由程序错误导致的异常,如空指针异常、数组越界异常等。
对于非受检异常,我们可以使用try-catch语句块来捕获并处理异常,或者在方法签名中使用throws关键字声明可能抛出的异常。
在实验中,我们通过编写代码来模拟各种异常情况,并使用try-catch语句块来捕获和处理异常。
我们还学习了如何创建自定义异常类,并在需要的时候抛出这些异常。
通过这个实验,我学到了异常处理的重要性以及如何正确地处理异常。
异常处理可以提高程序的健壮性和容错性,避免程序崩溃或出现未知的错误。
同时,异常处理也可以帮助我们定位和调试代码中的问题,提高代码的可维护性和可读性。
总的来说,这个实验对我来说是一次很好的学习和实践机会,让我更深入地理解了Java中的异常处理机制,并掌握了如何正确地处理异常。
我相信这些知识和技能对我在日后的编程工作中会非常有帮助。
实验二泛型异常处理实验报告一、实验目的1. 理解使用泛型、枚举的目的。
2. 掌握异常类、异常类的结构及自定义异常类的编程方法。
二、实验要求1. 应用泛型编写简单的应用程序;2. 自定义异常类的编写;3. 异常类中try, catch, throw, throws 的编写方法。
三、实验内容1. 阅读以下程序,写出运行结果。
同时,把程序改写为使用泛型的程序。
对比两个程序并说出泛型的优点。
public class GenericityDemo {public static void main(String[] args) {// 定义类Genericity的一个Integer版本Genericity intobj = new Genericity(new Integer(88));intobj.showType();int i = (Integer) intobj.getobj();System.out.println("value= " + i);System.out.println("----------------------------------");// 定义类Genericity的一个String版本Genericity strobj = new Genericity("Hello Genericity!");strobj.showType();String s = (String) strobj.getobj();System.out.println("value= " + s);}}class Genericity {private Object obj; // 定义通用类型成员public Genericity(Object obj) {this.obj = obj;}public Object getobj() { return obj;}public void setobj(Object obj) {this.obj = obj;}public void showType() {System.out.println("T实际类型是: " + obj.getClass().getName());}}2. 阅读程序并分析其输出结果:public class Exceptiontest {public static void mb_createException() {throw new ArrayIndexOutOfBoundsException();}// 方法mb_createException结束public static void mb_method() {try {mb_createException();System.out.print("try…\n");} catch (ArithmeticException e) {System.out.print("catch arithmeticException\n");} finally {System.out.print("execute finally\n");}// try-catch-finally结构结束System.out.print("mb_method end\n");}// 方法me_method结束public static void main(String args[]) {try {mb_method();} catch (Exception e) {System.out.print("catch exception\n");}// try-catch结构结束System.out.print("main end\n");}// 方法main结束}3. 编程实现输入二个整数,输出它们的商(整除的结果)。
要求使用异常机制:当除数为0时,输出除数为0。
当输入的数据出现其它字符时,重新输入数据。
四、实验结果1. 实验(1)的运行结果如下:把实验(1)的程序改写为泛型程序代码如下:public class GenericityNew<T> {private T obj;public GenericityNew (T obj){this.obj = obj;}public T getobj() {return this.obj;}public void setobj(T obj) {this.obj = obj;}public void showType() {System.out.println("T的实际类型是: "+ obj.getClass().getName());}public static void main(String[] args) {GenericityNew<Integer> intobj =new GenericityNew<Integer>(new Integer(88));intobj.showType();int i = intobj.getobj();System.out.println("value= " + i);System.out.println("----------------------------------");GenericityNew<String> strobj =new GenericityNew<String>("Hello Genericity!");strobj.showType();String s = strobj.getobj();System.out.println("value= " + s);}}相比起原来的那个程序,泛型类对setobj方法的参数进行了限定,getobj的返回值也不需要进行强制类型转换,这样能够确保程序中不会出现ClassCastException异常。
2. 实验(2)的结果如下:在main函数中,调用mb_method方法,mb_method方法中调用mb_createException 方法,这个方法会抛出一个ArrayIndexOutOfBoundsException异常,而这个异常没有被mb_method方法中的try…catch 语句捕获异常,但无论如何,finally中的代码始终会被执行。
所以输出了execute finally,然后就把异常继续往上一层的方法,也就是main方法抛;所以mb_method方法中的System.out.print("mb_method end\n");语句没有被执行。
ArrayIndexOutOfBoundsException异常被main函数中的try…catch语句捕获,所以System.out.print("catch exception\n");语句被执行,异常已经处理完成,程序会继续往下执行,所以main end也就被输出。
3. 实验(3)代码如下:import java.util.Scanner;public class DivideProgram {public static void main(String[] args) {Scanner s = new Scanner(System.in);while (true) {System.out.print("请输入被除数:");String strNumberA = s.nextLine();System.out.print("请输入除数:");String strNumberB = s.nextLine();try {double numA = Double.parseDouble(strNumberA);double numB = Double.parseDouble(strNumberB);if (numB == 0) {throw new DividedByZero();}double result = numA / numB;System.out.println(String.format("%f/%f=%f", numA, numB, result));} catch (NumberFormatException e) {System.out.println("请输入一个有效的数字!");continue;} catch (DividedByZero e) {System.out.println("除数不能为 0!");continue;}}}}class DividedByZero extends Exception {public DividedByZero() {super("除数不能为0!");}}运行结果如下:。