版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验8 异常处理、log4j、反射与内部类 一、 实验目的 、理解异常的概念,熟悉异常的分类、Exception类、Java的异常处理机制及声明抛出异常、自定义异常的方法; 、熟悉log4j的基本用法; 、理解反射的概念,熟悉反射中常用类的基本用法; 、理解内部类的概念,熟悉成员内部类和局部内部类的基本用法。 二、 实验步骤 1、(基础题)下图是一程序运行的结果,请根据程序代码和注释填空,并回答问题: 程序代码: /打印该类公有方法的返回类型、名称和参数列表 import java.lang.reflect.Method; class MyClass6 public void getData(
2、int a, float b, String s) public void putData(int a, int b) public class ClassMethodExample public static void main(String args) MyClass6 myObj = new MyClass6(); displayMethods(myObj); static void displayMethods(Object obj) int count = 0; Class<? extends Object> c1 = obj.getClass(); Method str
3、ingMethods = c1.getMethods(); while (count < stringMethods.length) String methodName = stringMethodscount.getName(); Class<?> returnType = stringMethodscount.getReturnType(); System.out.print( returnType + +methodName + (); Class parameterTypes = stringMethodscount.getParameterTypes(); for
4、(int i = 0; i < parameterTypes.length; i+) String parameterName = parameterTypesi.getName(); System.out.print( + parameterName); count+; System.out.println();); 问题: 1) 该程序的实现功能是什么? 打印该类公有方法的返回类型、名称和参数列表 2) 请解释一下运行结果前三行各代表什么含义? void getData(intfloatjava.lang.String);代表getData方法返回类型、名称和参数列表 void pu
5、tData(intint);代表putData方法返回类型、名称和参数列表 void wait(longint);代表wait方法返回类型、名称和参数列表 2、(基础题)分析、运行所给的Student.java程序,并回答下列问题: 1) 该程序的内部类是什么? 其访问权限怎样?有哪些属性和方法?构造方法具有什么功能? 内部类是Course类,私有访问权限,属性:String strCourse; courseNumber 方法:public Course(String course)(构造方法,初始化属性) private void getCourse()(获得并且输出课程名) privat
6、e void getDescription()(设置课程,并且输出) 2) 该程序的外部类是什么? Student缺省 3) 内部类与外部类之间是怎样联系的? 内部类实例是在哪里创建的? 部类与外部类之间通过public void setStudentCourse(String strCourse) 方法联系,在public void setStudentCourse(String strCourse) new Course(strCourse); 方法中创建实例 4) 内部类编译后形成的类文件是如何命名的? Student$Course 3、(基础题)根据catch子句处理异常所输出的信息的
7、提示,请在下面程序(1)、(2)、(2)处填入适当的代码: public class Lab6_4 public static void main(String args) try int x=68; int y=Integer.parseInt(args0); int z=x/y; System.out.println(x/y的值是+z); catch(_ArrayIndexOutOfBoundsException e _ ) System.out.println(缺少命令行参数。+e); catch(_NumberFormatException e _) System.out.printl
8、n(参数类型不正确。+e); catch(_ArithmeticException e _) System.out.println(算术运算错误。+e); finally System.out.println(程序执行完!); 程序运行结果如下: 程序执行完! Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 0 at pa.Lab6_4.main(Lab6_4.java:7) 有用提示: (1)ArithmeticException:除数为0时的算术异常 (2)NullPointerException:没有给
9、对象分配内存空间,而又去访问对象的空指针异常 (3)FileNotFoundException:找不到文件的异常 (4)ArrayIndexOutOfBoundsException:数组元素下标越界异常 (5)NumberFormatException:数据格式不正确异常 请模仿不同异常情况予以执行。 4、(基础题)下面是一个自定义异常类调用的程序,请根据程序上下文填充所缺内容: /自定义异常类MotorException,它继承了Exception类 class MotorException extends Exception public MotorException()super();
10、public MotorException(String s)super(s); class Car private float speed= 0; private float MAX_V = 300; /说明调用该方法可能抛出MotorException异常 public void accelerate(float inc) _throws MotorException_ if(speed+inc > MAX_V) /抛出MotorException异常实例,提示”发动机将被毁坏!” _throw new MotorException(发动机将被毁坏!) _; else speed+=
11、inc; public class Lab6_5 public static Car car; public static void main(String args) car= new Car(); _try_ /可能引发异常的块 for(;) car.accelerate(0.5f); _catch_ (MotorException me) /捕获、处理异常 System.out.println(Mechanical problem: +me); 程序运行结果: Mechanical problem: pa.MotorException: 发动机将被毁坏! 5、(基础题)先加载log4j的
12、jar包,再分析、运行下列程序,休会log4j的基本用法,并回答相关问题。 import java.util.InputMismatchException; import java.util.Scanner; import org.apache.log4j.Logger; public class Test private static Logger logger=Logger.getLogger(Test.class.getName(); public static void main(String args) try Scanner in = new Scanner(System.in);
13、 System.out.print(请输入被除数:); int num1 = in.nextInt(); logger.debug(输入被除数: + num1); System.out.print(请输入除数:); int num2 = in.nextInt(); logger.debug(输入除数: + num2); System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); logger.debug(输出运算结果: + String.format(%d / %d = %d, num1, num2, num1
14、 / num2); catch (InputMismatchException e) logger.error(被除数和除数必须是整数, e); catch (ArithmeticException e) logger.error(e.getMessage(); catch (Exception e) logger.error(e.getMessage(); finally System.out.println(欢迎使用本程序!); # 设置Logger输出级别和输出%u76EE的地 # log4j.rootLogger=debug,A,B # 把日志信息输出到控制%u53F0 # log4j
15、.appender.A=org.apache.log4j.ConsoleAppender log4j.appender.A.Target=System.err log4j.appender.A.layout=org.apache.log4j.SimpleLayout # 把日志信息输出到文件%uFF1Ajbit.log # log4j.appender.B=org.apache.log4j.FileAppender log4j.appender.B.File=jbit.log log4j.appender.B.layout=org.apache.log4j.PatternLayout log4
16、j.appender.B.layout.ConversionPattern=%dYYYY-MM-DD HH:mm:ss %l %F %p %m%n 问题: 1) log4j将信息分为多少个级别? 五大级别 2) 怎样设置才能将错误信息在屏幕上显示? 配置perties 把日志信息输出到控制台 )怎样设置才能将错误信息在文件中输出? 配置perties把日志信息输出到文件 6、(提高题)模拟银行ATM完成以下功能: (1)查询余额 (2)取款 (3)存款 (4)退出 在控制台上模拟上述菜单,系统根据用户所选择的数字进行相应的功能。如果所选数字不是以上1-4之间
17、通知重新输入。当用户取款的金额超出帐户余额抛出自定义异常,通知重新输入金额。当用户选择4时整个系统退出。 运行效果如下所示:(主类名字必须改,否则运行出错) 请认真阅读下面的代码并回答如下问题: (1)自定义异常类BankException 继承了什么类?能不能换成其他的类?为什么? (2)类Bank的 menu()方法的功能是什么?menu()方法里调用了哪些方法? (3)在取款方法deposit()里声明了哪些异常?当余额不足时,又重新抛出了哪个异常? import java.io.*; /主程序: public class MyException public static void m
18、ain(String args) Bank my = new Bank(1000.0); / 菜单 while (true) Bank.menu(my); /定义自定义异常类.抛出该异常条件:取款金额超出帐户余额 class BankException extends Exception void disp() System.out.println(余额不足);1显示余 2取 3存 )退Press No.:1帐户余额:1000.01显示余 2取 3存 Press No.:2请输入取款金101显示余 2取 3存 Press No.:1帐户余额:900.01显示余 2取 3存 Press No.:
19、2 请输入取款金额12余额不足 1)显示余额 2)取款 3)存款 4)Press No.:4 系统退出! class Bank double account;/ 余额 Bank(double dl) account = dl; static void menu(Bank obj) System.out.println(1)显示余额 2)取款 3)存款 4)退出); System.out.print(Press No.:); switch (getChoice() case 1: obj.disp();/ 余额显示 break; case 2: try obj.deposit();/ 取款 ca
20、tch (BankException e) e.disp(); catch (IOException e) e.printStackTrace(); break; case 3: obj.saving();/ 存款 break; case 4: System.out.println(系统退出!); System.exit(0); default: System.out.println(重新选择!); static int getChoice() / 选择功能数字 int choice = 0; try BufferedReader br = new BufferedReader(new Inp
21、utStreamReader( System.in); choice = Integer.parseInt(br.readLine(); catch (IOException e) e.printStackTrace(); return choice; / 存款 void saving() double trans_account; / 输入存款金额 System.out.print(请输入存款金额); try BufferedReader br = new BufferedReader(new InputStreamReader( System.in); trans_account = Double.parseDouble(br.readLine(); account += trans_account; catch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初改保安考试试题及答案
- 2026三年级数学下册 小数价值引领
- 2026三年级数学下册 位置与方向全面发展
- 2026二年级数学下册 数学广角专项
- 综合素养考试题库及答案
- 2026二年级数学 北师大版儿童乐园情境体验
- 培训学校奖惩制度制度
- 小学数学二年级奖惩制度
- 九小场所消防安全制度
- 电力安全奖惩制度范本
- 初中语文中考主旨探究与表达题知识清单
- 2026复工复产安全培训第9版
- (新版)ISO37301-2021合规管理体系全套管理手册及程序文件(可编辑!)
- 《TCSUS69-2024智慧水务技术标准》
- 中国图书馆分类法简表
- 统筹方法平话及补充(全)华罗庚
- 关节脱位患者的护理-关节脱位患者的护理(外科护理ppt)
- 经皮肾镜碎石术并发脓毒血症的风险与防治
- 商务接待礼仪课件
- MetabolicPathways生物化学代谢清晰版全图
- 电力变压器长时感应电压试验带局部放电测量试验作业指导书
评论
0/150
提交评论