实验8异常处理、log4j、反射与内部类(1440707139洪晓杰)_第1页
实验8异常处理、log4j、反射与内部类(1440707139洪晓杰)_第2页
实验8异常处理、log4j、反射与内部类(1440707139洪晓杰)_第3页
实验8异常处理、log4j、反射与内部类(1440707139洪晓杰)_第4页
实验8异常处理、log4j、反射与内部类(1440707139洪晓杰)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验8 异常处理、log4j、反射与内部类一、 实验目的、理解异常的概念,熟悉异常的分类、Exception类、Java的异常处理机制及声明抛出异常、自定义异常的方法;、熟悉log4j的基本用法;、理解反射的概念,熟悉反射中常用类的基本用法;、理解内部类的概念,熟悉成员内部类和局部内部类的基本用法。二、 实验步骤1、(基础题)下图是一程序运行的结果,请根据程序代码和注释填空,并回答问题:程序代码:/打印该类公有方法的返回类型、名称和参数列表import java.lang.reflect.Method;class MyClass6 public void getData(int a, floa

2、t 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 stringMethods = c1

3、.getMethods();while (count < stringMethods.length) String methodName = stringMethodscount.getName();Class<?> returnType = stringMethodscount.getReturnType();System.out.print( returnType + " " +methodName + "(");Class parameterTypes = stringMethodscount.getParameterTypes(

4、);for (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

5、方法返回类型、名称和参数列表void putData(intint);代表putData方法返回类型、名称和参数列表void wait(longint);代表wait方法返回类型、名称和参数列表2、(基础题)分析、运行所给的Student.java程序,并回答下列问题:1) 该程序的内部类是什么? 其访问权限怎样?有哪些属性和方法?构造方法具有什么功能?内部类是Course类,私有访问权限,属性:String strCourse; courseNumber 方法:public Course(String course)(构造方法,初始化属性)private void getCourse()(获

6、得并且输出课程名)private void getDescription()(设置课程,并且输出)2) 该程序的外部类是什么?Student缺省3) 内部类与外部类之间是怎样联系的? 内部类实例是在哪里创建的?部类与外部类之间通过public void setStudentCourse(String strCourse)方法联系,在public void setStudentCourse(String strCourse)new Course(strCourse);方法中创建实例4) 内部类编译后形成的类文件是如何命名的?Student$Course3、(基础题)根据catch子句处理异常所输

7、出的信息的提示,请在下面程序(1)、(2)、(2)处填入适当的代码:public class Lab6_4 public static void main(String args)tryint 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

8、_)System.out.println("参数类型不正确。"+e);catch(_ArithmeticException e _)System.out.println("算术运算错误。"+e);finallySystem.out.println("程序执行完!");程序运行结果如下:程序执行完!Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0at pa.Lab6_4.main(Lab6_4.java:7)有用提示:(1)A

9、rithmeticException:除数为0时的算术异常(2)NullPointerException:没有给对象分配内存空间,而又去访问对象的空指针异常(3)FileNotFoundException:找不到文件的异常(4)ArrayIndexOutOfBoundsException:数组元素下标越界异常(5)NumberFormatException:数据格式不正确异常请模仿不同异常情况予以执行。4、(基础题)下面是一个自定义异常类调用的程序,请根据程序上下文填充所缺内容:/自定义异常类MotorException,它继承了Exception类class MotorException e

10、xtends Exceptionpublic MotorException()super();public MotorException(String s)super(s);class Carprivate float speed= 0;private float MAX_V = 300;/说明调用该方法可能抛出MotorException异常public void accelerate(float inc) _throws MotorException_ if(speed+inc > MAX_V)/抛出MotorException异常实例,提示”发动机将被毁坏!”_throw new

11、MotorException("发动机将被毁坏!")_; elsespeed+=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 pro

12、blem: pa.MotorException: 发动机将被毁坏!5、(基础题)先加载log4j的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 ar

13、gs) try Scanner in = new Scanner(System.in);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&qu

14、ot;, num1, num2, num1/ num2);logger.debug("输出运算结果:" + String.format("%d / %d = %d",num1, num2, num1 / num2); catch (InputMismatchException e) logger.error("被除数和除数必须是整数", e); catch (ArithmeticException e) logger.error(e.getMessage(); catch (Exception e) logger.error(e.ge

15、tMessage(); finally System.out.println("欢迎使用本程序!");# u8BBEu7F6ELoggeru8F93u51FAu7EA7u522Bu548Cu8F93u51FAu76EEu7684u5730 #log4j.rootLogger=debug,A,B# u628Au65E5u5FD7u4FE1u606Fu8F93u51FAu5230u63A7u5236u53F0 #log4j.appender.A=org.apache.log4j.ConsoleAppenderlog4j.appender.A.Target=System.errl

16、og4j.appender.A.layout=org.apache.log4j.SimpleLayout# u628Au65E5u5FD7u4FE1u606Fu8F93u51FAu5230u6587u4EF6uFF1Ajbit.log #log4j.appender.B=org.apache.log4j.FileAppenderlog4j.appender.B.File=jbit.loglog4j.appender.B.layout=org.apache.log4j.PatternLayoutlog4j.appender.B.layout.ConversionPattern=%dYYYY-MM

17、-DD HH:mm:ss %l %F %p %m%n问题:1) log4j将信息分为多少个级别?五大级别2) 怎样设置才能将错误信息在屏幕上显示?配置perties 把日志信息输出到控制台)怎样设置才能将错误信息在文件中输出?配置perties把日志信息输出到文件6、(提高题)模拟银行ATM完成以下功能:(1)查询余额 (2)取款 (3)存款 (4)退出在控制台上模拟上述菜单,系统根据用户所选择的数字进行相应的功能。如果所选数字不是以上1-4之间通知重新输入。当用户取款的金额超出帐户余额抛出自定义异常,通知重新输入金额。当用户选择4时整个系统退出。运行效果如

18、下所示:(主类名字必须改,否则运行出错)1)显示余额 2)取款 3)存款 4)退出Press No.:1帐户余额为:1000.01)显示余额 2)取款 3)存款 4)退出Press No.:2请输入取款金额1001)显示余额 2)取款 3)存款 4)退出Press No.:1帐户余额为:900.01)显示余额 2)取款 3)存款 4)退出Press No.:2请输入取款金额1200余额不足1)显示余额 2)取款 3)存款 4)退出Press No.:4系统退出!请认真阅读下面的代码并回答如下问题:(1)自定义异常类BankException 继承了什么类?能不能换成其他的类?为什么?(2)类B

19、ank的 menu()方法的功能是什么?menu()方法里调用了哪些方法?(3)在取款方法deposit()里声明了哪些异常?当余额不足时,又重新抛出了哪个异常?import java.io.*;/主程序:public class MyException public static void main(String args) Bank my = new Bank(1000.0);/ 菜单while (true) Bank.menu(my);/定义自定义异常类.抛出该异常条件:取款金额超出帐户余额class BankException extends Exception void disp()

20、 System.out.println("余额不足");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();/ 取款 c

21、atch (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 BufferedR

22、eader(new InputStreamReader(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()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论