异常类、嵌套类、枚举类
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
课程名称 面向对象程序设计
实验项目名称 异常类、嵌套类、枚举类 学生姓名 专业班级 学号 注意:
, 务请保存好各自的源代码,已备后用。
, 完成本实验后,将实验项目文件和实验
,压缩为rar文件,上传ftp。如没有个人
文件夹,请按学号_姓名
建立。
, 文件名为:学号_日期_实验XX,如30801001_20100305_实验01.rar , 请务必在下次实验课之前提交作业,迟交缺交实验报告将酌情扣分。 , 请勿抄袭作业。一次作业抄袭的扣分数至少为缺交作业的3倍。
一. 实验目的和要求
掌握异常类、嵌套类、枚举类
二. 实验内容
1、程序阅读
2、综合体
三. 实验结果与
(可将程序运行结果截屏,也可分析运行结果)
(一)、程序阅读结果
1(运行下面的Test类,写出运行结果,并分析比较代码1与代码2两种方式的异同
abstract class A{
abstract void abc();
void bbb(){abc();}
}
class B extends A{
void abc(){System.out.println("bbb");}
}
class Test{
static void f(A a){ a.bbb();}
public static void main(String[] args){
f( new A(){
void abc(){System.out.println("bbb");}
}
); //代码1
f(new B());//代码2
}
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
}
代码1是匿名类实现;
代码2是顶层类实现;
2(运行下面的Test类,写出运行结果,并分析比较代码1与代码2两种方式的异同 interface IA{
void abc();
void bbb();
}
class A implements IA{
public void bbb(){System.out.println("ccc");}
public void abc(){System.out.println("bbb");} }
class Test{
static void f(IA a){ a.bbb();}
public static void main(String[] args){
f(new IA(){
public void bbb(){System.out.println("ccc");}
public void abc(){System.out.println("bbb");}
}
); //代码1
f(new A());//代码2
}
}
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
(二)、综合题
1(编译下面的程序,并回答问题。
class ExceptionTest1{
public static void main(String[] args){
int a=0,b=0;
try{
a = Integer.parseInt(args[0]); // 语句1
b = 10; // 语句2
}
catch(NumberFormatException e){
a = 1;
}
System.out.println(a);
System.out.println(b);
}
}
(1)执行上述ExceptionTest1类(在命令提示符下敲入java ExceptionTest1 99) 运行结果:
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
(2)执行上述ExceptionTest1类(在命令提示符下敲入java ExceptionTest a) 运行结果:
(3)比较上面两次运行的结果,说明原因。(思考:执行语句1时发生异常,语句2执行没有,) 第一次执行时,输入了99,99可以被强制转化,所以不会出错,此时a=99,b=10;
第二次执行时,输入了a,而a不能被强制转化成Integer类,所以执行Integer.parseInt(args[0])语句时,就会出错,使得a=1,则b=10就不会被执行,所以b仍然是0;
2(编译下面的程序,并回答问题。
class ExceptionTest2{
public static void main(String[] args){
int a=0;
try{
a = Integer.parseInt(args[0]);
}
}
}
(1) 编译上述程序,是否出错?
出错。
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
(2) 如果出错, 给出出错信息(即javac编译该文件出错信息):
分析为何出错?
try语句之后一定要带有catch或者finally。
(2)如果将程序改写为:
class ExceptionTest2{
public static void main(String[] args){
int a=0;
try{
a = Integer.parseInt(args[0]);
}
catch(NumberFormatException e){
a = 1;
}
}
}
上述程序是否编译出错?
为什么?
没有出错。
(3)如果将程序改写为:
class ExceptionTest2{
public static void main(String[] args){
int a=0;
try{
a = Integer.parseInt(args[0]);
}
finally{
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
a = 1;
}
}
}
上述程序是否编译出错?
为什么?
没有出错。
(4) 如果将程序改写为:
class ExceptionTest2{
public static void main(String[] args){
int a=0;
try{
a = Integer.parseInt(args[0]);
}
catch(Exception e){
a = 1;
}
catch(NumberFormatException e){
a = 2;
}
}
}
上述程序是否编译出错?
出错。
分析为何出错, 如何修改程序使之正确?
异常已经被catch(Exception e)处理,
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
catch(NumberFormatException e)无法找到catch块。 直接去掉catch(NumberFormatException e){}。 3、编译下面的程序,并回答问题。
class ExceptionTest3{
public static void main(String[] args){
check(-1);
}
static void check(int i){
if( i<0) throw new Exception();
}
}
(1) 上述程序编译是否出错,
出错。
分析错误原因
异常类型 Exception未被处理。
(2)将上述程序修改为:
class ExceptionTest3{
public static void main(String[] args){
check(-1);
}
static void check(int i) throws Exception{
if( i<0) throw new Exception();
}
}
那么,上述程序编译是否出错,
出错。
分析出错原因:
异常类型 Exception未被处理。
4(编译下面程序,回答问题。
class ExceptionTest4{
public static void main(String[] args){
method3();
System.out.println("success!");
}
static void method1(){
throw new Exception();
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
=====================================================================
=======
}
static void method2(){
method1();
}
static void method3(){
method2();
}
}
(1) 上述程序编译是否出错,
出错。
编译错误是什么,
异常类型 Exception未被处理。
(2)修正上述程序(通过两种方式:给方法添加throws子句,或者使用try-catch-finally)。
class ExceptionTest4{
public static void main(String[] args){
try{method3();}
.println("success!");} catch(Exception e){System.out
}
static void method1()throws Exception{
throw new Exception();
}
static void method2()throws Exception{
method1();
}
static void method3()throws Exception{
method2();
}
}
(3)如果将方法method1中的throw new Exception();更改为: throw new RuntimeException(); 那么程序是否编译通过,
通过。
如果编译正常,那么执行ExceptionTest4类,出现什么结果(是否会显示success字符串),
不会显示success。
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
=====================================================================
=======
如何修改程序使得能够显示success字符串,
class ExceptionTest4{
public static void main(String[] args){
try{
method3();
}catch(RuntimeException e){
System.out.println("success!");
}
}
static void method1(){
throw new RuntimeException();
}
static void method2(){
method1();
}
static void method3(){
method2();
}
}
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。 =====================================================================
=======
5、设计一个简单的类ExceptionTest, 在该类的main方法中实现:将输入参数args[0]转换为int类型的数字(要求使用包装类的数字转换方法,并通过try-catch-finally方式捕获并处理转换异常),然后显示这个数字的平方值。
比如,在命令提示符下输入java ExceptionTest 9 并回车,程序显示81。
public class ExceptionTest {
public static void main(String[] args){
int a;
try{
a= Integer.parseInt(args[0]);
a=a*a;
}catch(NumberFormatException e){
a = 1;
}
System.out.println(a);
}
}
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
============================================================================
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==============================================================