请先阅读 EmbedeFinally.java示例,再运行它,观察其输出并进行总结java
源代码:spa
public class EmbededFinally { 对象
public static void main(String args[]) { blog
int result; 资源
try { get
System.out.println("in Level 1"); io
try { class
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");
}
}
}
解锁的方法写在finally{}中不管上面是否有异常都会执行这里面的代码
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");
}
}
}
总结:Java经过使用try…catch…finally语句来捕获一个或多个异常,catch语句能够有一个或多个,并且至少要一个catch语句或finally。若是某处发生异常,则try语句中此处以后的代码都不会被执行,如:
Try{
String s=”abc”;
int i=Integer.parseInt(s);
int a=i+10;
}
当程序运行时,异常发生,则try语句抛出异常对象,a=i+10;此语句位于异常发生处以后,不会被执行。
Finally语句用法:因为当异常发生时,已经分配的资源会保持原来的状态,不能被释放,因此finally语句主要用来释放和清理有关的资源或善后工做,如关闭打开的文件等。Finally语句是一个统一的出口,即不管try语句中是否发生异常,也不管catch语句的的异常类型与try语句抛出的异常的类型是否匹配,finally语句中的代码都要被执行。Finally语句不是必需的,若在某些场合中不须要释放资源,那么try…catch语句中能够没有finally语句。