Java中的异常详解
Java异常类层次结构图:
异常分类
java中的异常通常分为 受检异常 和 不受检异常 。
受检异常:编译器要求代码中必须处理的异常,上图中的IOException就属于受检异常。
不受检异常:编译器不要求强制处理的异常,上图中RuntimeException和Error属于不受检异常。
抛出异常
import java.io.EOFException;
/**
*
* @author wangcan
*
*/
public class Test {
public static void main(String[] args) throws EOFException {
EOFException e = new EOFException();//EOFException:在输入过程中,遇到了一个未预期的EOF后的信号
throw e;
//或者直接 throw new EOFException();
}
}
自定义异常类
有些时候,官方自带的异常类不能满足你的需求,这时可以定义自己的异常类,只需要派生于Exception类,或者Exception的子类。
简单示例:
import java.io.IOException;
public class FileFormatException extends IOException{
public FileFormatException(){}
public FileFormatException(String gripe){
super(gripe);
}
}
public class Test {
public static void main(String[] args) throws FileFormatException {
throw new FileFormatException();
}
}
异常的捕获
使用try catch进行异常的捕获:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Finally {
void fileWith(){
InputStream in = null;
try {
in = new FileInputStream("wang.txt");
//其他操作
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
try {
//其他操作
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (UnknownHostException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
捕获多个异常不仅会让代码看起来更简单,而且更高效。