实验8异常处理log4j反射与内部类Word文档下载推荐.docx
- 文档编号:17284049
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:12
- 大小:21.40KB
实验8异常处理log4j反射与内部类Word文档下载推荐.docx
《实验8异常处理log4j反射与内部类Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验8异常处理log4j反射与内部类Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
Class<
>
returnType=stringMethods[count].getReturnType();
System.out.print(returnType+"
"
+methodName+"
("
);
Class[]parameterTypes=stringMethods[count].getParameterTypes();
for(inti=0;
i<
parameterTypes.length;
i++){
StringparameterName=parameterTypes[i].getName();
System.out.print("
"
+parameterName);
}
count++;
System.out.println("
}
问题:
1)该程序的实现功能是什么?
打印该类公有方法的返回类型、名称和参数列表
2)请解释一下运行结果前三行各代表什么含义?
voidgetData(intfloatjava.lang.String);
代表getData方法返回类型、名称和参数列表
voidputData(intint);
代表putData方法返回类型、名称和参数列表
voidwait(longint);
代表wait方法返回类型、名称和参数列表
2、(基础题)分析、运行所给的Student.java程序,并回答下列问题:
1)该程序的内部类是什么?
其访问权限怎样?
有哪些属性和方法?
构造方法具有什么功能?
内部类是Course类,私有访问权限,属性:
String[]strCourse;
courseNumber
方法:
publicCourse(String[]course)(构造方法,初始化属性)
privatevoidgetCourse()(获得并且输出课程名)
privatevoidgetDescription()(设置课程,并且输出)
2)该程序的外部类是什么?
Student缺省
3)内部类与外部类之间是怎样联系的?
内部类实例是在哪里创建的?
部类与外部类之间通过publicvoidsetStudentCourse(String[]strCourse)
方法联系,在publicvoidsetStudentCourse(String[]strCourse)
{
newCourse(strCourse);
}方法中创建实例
4)内部类编译后形成的类文件是如何命名的?
Student$Course
3、(基础题)根据catch子句处理异常所输出的信息的提示,请在下面程序
(1)、
(2)、
(2)处填入适当的代码:
publicclassLab6_4{
publicstaticvoidmain(Stringargs[]){
try{
intx=68;
inty=Integer.parseInt(args[0]);
intz=x/y;
x/y的值是"
+z);
}catch(___ArrayIndexOutOfBoundsExceptione___){
缺少命令行参数。
+e);
}catch(______NumberFormatExceptione_____){
参数类型不正确。
}catch(________ArithmeticExceptione______){
算术运算错误。
}finally{
程序执行完!
程序运行结果如下:
Exceptioninthread"
main"
java.lang.ArrayIndexOutOfBoundsException:
0
atpa.Lab6_4.main(Lab6_4.java:
7)
有用提示:
(1)ArithmeticException:
除数为0时的算术异常
(2)NullPointerException:
没有给对象分配内存空间,而又去访问对象的空指针异常
(3)FileNotFoundException:
找不到文件的异常
(4)ArrayIndexOutOfBoundsException:
数组元素下标越界异常
(5)NumberFormatException:
数据格式不正确异常
请模仿不同异常情况予以执行。
4、(基础题)下面是一个自定义异常类调用的程序,请根据程序上下文填充所缺内容:
//自定义异常类MotorException,它继承了Exception类
classMotorExceptionextendsException{
publicMotorException(){super();
publicMotorException(Strings){super(s);
classCar{
privatefloatspeed=0;
privatefloatMAX_V=300;
//说明调用该方法可能抛出MotorException异常
publicvoidaccelerate(floatinc)_throwsMotorException__{
if(speed+inc>
MAX_V){
//抛出MotorException异常实例,提示”发动机将被毁坏!
”
____thrownewMotorException("
发动机将被毁坏!
)____;
}else{
speed+=inc;
publicclassLab6_5{
publicstaticCarcar;
car=newCar();
_try___{//可能引发异常的块
for(;
;
)
car.accelerate(0.5f);
}___catch____(MotorExceptionme){//捕获、处理异常
Mechanicalproblem:
+me);
程序运行结果:
pa.MotorException:
发动机将被毁坏!
5、(基础题)先加载log4j的jar包,再分析、运行下列程序,休会log4j的基本用法,并回答相关问题。
importjava.util.InputMismatchException;
importjava.util.Scanner;
importorg.apache.log4j.Logger;
publicclassTest{
privatestaticLoggerlogger=Logger.getLogger(Test.class.getName());
publicstaticvoidmain(String[]args){
try{
Scannerin=newScanner(System.in);
System.out.print("
请输入被除数:
intnum1=in.nextInt();
logger.debug("
输入被除数:
+num1);
请输入除数:
intnum2=in.nextInt();
输入除数:
+num2);
System.out.println(String.format("
%d/%d=%d"
num1,num2,num1/num2));
输出运算结果:
+String.format("
num1,num2,num1/num2));
}catch(InputMismatchExceptione){
logger.error("
被除数和除数必须是整数"
e);
}catch(ArithmeticExceptione){
logger.error(e.getMessage());
}catch(Exceptione){
}finally{
欢迎使用本程序!
###\u8BBE\u7F6ELogger\u8F93\u51FA\u7EA7\u522B\u548C\u8F93\u51FA\u76EE\u7684\u5730###
log4j.rootLogger=debug,A,B
###\u628A\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u63A7\u5236\u53F0###
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.Target=System.err
log4j.appender.A.layout=org.apache.log4j.SimpleLayout
###\u628A\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u6587\u4EF6\uFF1Ajbit.log###
log4j.appender.B=org.apache.log4j.FileAppender
log4j.appender.B.File=jbit.log
log4j.appender.B.layout=org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern=%d{YYYY-MM-DDHH:
mm:
ss}%l%F%p%m%n
1)log4j将信息分为多少个级别?
五大级别
2)怎样设置才能将错误信息在屏幕上显示?
配置log4j.properties把日志信息输出到控制台
3)怎样设置才能将错误信息在文件中输出?
配置log4j.properties把日志信息输出到文件
6、(提高题)模拟银行ATM完成以下功能:
(1)查询余额
(2)取款(3)存款(4)退出
在控制台上模拟上述菜单,系统根据用户所选择的数字进行相应的功能。
如果所选数字不是以上1-4之间通知重新输入。
当用户取款的金额超出帐户余额抛出自定义异常,通知重新输入金额。
当用户选择4时整个系统退出。
运行效果如下所示:
(主类名字必须改,否则运行出错)
1)显示余额2)取款3)存款4)退出
PressNo.:
1
帐户余额为:
1000.0
2
请输入取款金额100
900.0
请输入取款金额1200
余额不足
4
系统退出!
请认真阅读下面的代码并回答如下问题:
(1)自定义异常类BankException继承了什么类?
能不能换成其他的类?
为什么?
(2)类Bank的menu()方法的功能是什么?
menu()方法里调用了哪些方法?
(3)在取款方法deposit()里声明了哪些异常?
当余额不足时,又重新抛出了哪个异常?
importjava.io.*;
//主程序:
publicclassMyException{
Bankmy=newBank(1000.0);
//菜单
while(true){
Bank.menu(my);
//定义自定义异常类.抛出该异常条件:
取款金额超出帐户余额
classBankExceptionextendsException{
voiddisp(){
System.out.println("
余额不足"
classBank{
doubleaccount;
//余额
Bank(doubledl){
account=dl;
staticvoidmenu(Bankobj){
1)显示余额2)取款3)存款4)退出"
System.out.print("
switch(getChoice()){
case1:
obj.disp();
//余额显示
break;
case2:
try{
obj.deposit();
//取款
}catch(BankExceptione){
e.disp();
}catch(IOExceptione){
e.printStackTrace();
case3:
obj.saving();
//存款
case4:
System.exit(0);
default:
重新选择!
staticintgetChoice(){//选择功能数字
intchoice=0;
BufferedReaderbr=newBufferedReader(newInputStreamReader(
System.in));
choice=Integer.parseInt(br.readLine());
}catch(IOExceptione){
e.printStackTrace();
returnchoice;
//存款
voidsaving(){
doubletrans_account;
//输入存款金额
请输入存款金额"
trans_account=Double.parseDouble(br.readLine());
account+=trans_account;
//取款
voiddeposit()throwsBankException,IOException{
请输入取款金额"
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
//判断余额
if(account>
trans_account){
account-=trans_account;
}else
thrownewBankException();
//抛出异常
//打印余额
+account);
运行结果如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验8 异常处理log4j反射与内部类 实验 异常 处理 log4j 反射 部类