动手动脑1:
请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识
运行结果:
未使用异常处理的运行结果结果
添加try…catch和合适的异常处理代码后之后
结论:异常发生,运行catch中的异常处理代码,最后执行finally中的内容(不管是否有异常发生,finally语句块中的语句始终保证被执行)。
技术探索:
前页PPT中所出现之奇怪现象,可以使用javap去反汇编两个示例程序的.class文件(一个是AboutException.class,另一个是ThrowDemo.class),从中你会有所发现的。
反汇编:
动手动脑2:
阅读以下代码(CatchWho.java),写出程序运行结果:
public class CatchWho
{
public static void main(String[] args)
{
try
{
try
{
throw new ArrayIndexOutOfBoundsException();
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException();
}
catch(ArithmeticException e)
{
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
运行结果:
写出CatchWho2.java程序运行的结果
public class CatchWho2
{
public static void main(String[] args)
{
try
{
try
{
throw new ArrayIndexOutOfBoundsException();
}
catch(ArithmeticException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException();
}
catch(ArithmeticException e) {
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
运行结果:
动手动脑3:
请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
代码:
public class EmbededFinally
{
public static void main(String args[])
{
int result;
try
{
System.out.println("in Level 1");
try
{
System.out.println("in Level 2");
// result=100/0; //Level 2
try
{
System.out.println("in Level 3");
result=100/0; //Level 3
}
catch (Exception e)
{
System.out.println("Level 3:" + e.getClass().toString());
}
finally
{
System.out.println("In Level 3 finally");
}
// result=100/0; //Level 2
}
catch (Exception e)
{
System.out.println("Level 2:" + e.getClass().toString());
}
finally
{
System.out.println("In Level 2 finally");
}
// result = 100 / 0; //level 1
}
catch (Exception e)
{
System.out.println("Level 1:" + e.getClass().toString());
}
finally
{
System.out.println("In Level 1 finally");
}
}
}
运行结果:
结论:嵌套使用try…catch语句时,最内层的finally会先执行,之后由内而外的执行。
动手动脑4:
辨析:finally语句块一定会执行吗?
请通过 SystemExitAndFinally.java示例程序回答上述问题
代码:
1 public class SystemExitAndFinally 2 { 3 4 5 public static void main(String[] args) 6 7 { 8 9 try 10 { 11 12 13 System.out.println("in main"); 14 15 throw new Exception("Exception is thrown in main"); 16 17 //System.exit(0); 18 19 20 } 21 22 catch(Exception e) 23 24 { 25 26 System.out.println(e.getMessage()); 27 28 System.exit(0); 29 30 } 31 32 finally 33 34 { 35 36 System.out.println("in finally"); 37 38 } 39 40 } 41 42 43 }
运行结果:
结论:
在catch中使用System.exit(0);程序会提前结束不会执行finally语句。