动手动脑1.请阅读并运行AboutException.java示例。
运行结果:
动手动脑2.阅读以下代码(CatchWho.java),写出程序运行结果:
运行结果:
ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException
动手动脑3.写出CatchWho2.java程序运行的结果
运行结果:
ArrayIndexOutOfBoundsException/外层try-catch
动手动脑4.请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
运行结果:
in Level 1
in Level 2
in Level 3
Level 3:class java.lang.ArithmeticException
In Level 3 finally
In Level 2 finally
In Level 1 finally
总结:
当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
动手动脑5.finally语句块一定会执行吗?请通过 SystemExitAndFinally.java示例程序回答上述问题
运行结果:
in main
Exception is thrown in main
一定会执行finally语句块。
动手动脑6.如何跟踪异常的传播路径?
当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。
可使用printStackTrace 和 getMessage方法了解异常发生的情况:
printStackTrace:打印方法调用堆栈。
每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。
课后作业
源代码:
import java.util.Scanner;
class MyException extends Exception{
public MyException(String msg){
super(msg);
}
}
class fen{
int a;
public void panduan(int x){
a=x;
if(a<60)
{
System.out.println("不及格!");
if(a<40)
System.out.println("差");
}
if(a>=60){
{
System.out.println("及格!");
if(a<=70)
System.out.println("中");
if(a<80 && a>=70)
System.out.println("良");
if(a>=80)
System.out.println("优");
}
}
}
}
public class jige {
public static void main(String []args)throws MyException{
fen jg = new fen();
System.out.println("请输入成绩:");
try{
Scanner scanner1 = new Scanner(System.in);
String b = scanner1.next();
boolean result=b.matches("[0-9]+");
if(result==true)
{
int a=Integer.valueOf(b);
if(a>100||a<0)
throw new MyException("输入范围不正确!");
else
jg.panduan(a);
}
if(result==false)
throw new MyException("输入格式错误!");
}
catch(MyException e){
System.out.println(e);
}
}
}
运行结果截图: