说明
- java的异常处理中会遇到try-catch、try-finally、try-catch-finally这样的块结构。如果要捕获异常,需要有catch块。如果异常不需要捕获,而是要抛出,可以不用catch块。
- finally语句块一般是释放资源,总会被执行到。即便在try模块抛出了异常,finally语句块的内容也会被执行。
示例
没有捕获异常,而是抛出了
package com.thb;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Test1 {
public static void main(String[] args) throws Exception {
InputStream is = null;
try {
File file = new File("d:/temp/test.txt");
is = new FileInputStream(file);
} finally {
is.close();
}
}
}
捕获异常
package com.thb;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Test1 {
public static void main(String[] args) {
InputStream is = null;
try {
File file = new File("d:/temp/test.txt");
is = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
只包含try-catch
package com.thb;
import java.io.IOException;
import java.net.ServerSocket;
public class Test1 {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在try语句块抛出了可检查异常,finally语句块也被执行到了
package com.thb;
import java.security.GeneralSecurityException;
public class Demo1 {
public static void main(String[] args) throws Exception {
try {
System.out.println("try block");
throw new GeneralSecurityException();
} finally {
System.out.println("finally block");
}
}
}
运行输出:
try block
finally block
Exception in thread "main" java.security.GeneralSecurityException
at com.thb.Demo1.main(Demo1.java:11)
在try语句块抛出了运行时异常,finally语句块也被执行到了
package com.thb;
import java.security.GeneralSecurityException;
public class Demo1 {
public static void main(String[] args) throws Exception {
try {
System.out.println("try block");
throw new RuntimeException();
} finally {
System.out.println("finally block");
}
}
}
运行输出:
try block
finally block
Exception in thread "main" java.lang.RuntimeException
at com.thb.Demo1.main(Demo1.java:10)
在catch语句块又抛出了异常,finally语句块也被执行到了
package com.thb;
import java.security.GeneralSecurityException;
public class Demo1 {
public static void main(String[] args) throws Exception {
try {
System.out.println("try block");
throw new RuntimeException();
} catch (Exception e){
System.out.println("catch block");
throw new GeneralSecurityException();
} finally {
System.out.println("finally block");
}
}
}
运行输出:
try block
catch block
finally block
Exception in thread "main" java.security.GeneralSecurityException
at com.thb.Demo1.main(Demo1.java:14)