一 原因:
JDK1.7中的multi-catch的变化, multi-catch 语句中的替代无法通过子类化关联
二 错误详解:
**在不使用jdk1.7的multi-catch时, 我们在处理父子异常时:**
import Java.io.*;
public class Hello {
public static void main(String[] args) {
try {
throw new IOException("我错了");
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
父子异常时, 是先子后父.
Jdk1.7中提供了multi-catch语法, 1.7.0-ea-b136包括之前的版本, 我测试时可以使用
import java.io.*;
public class Hello {
public static void main(String[] args) {
try {
throw new IOException("我错了");
} catch (IOException | Exception e) {
e.printStackTrace();
}
}
}
但之后, 一直到现在(1.7.0-ea-b143),这样写时会报
Hello.java:7: 错误: multi-catch 语句中的替代无法通过子类化关联
} catch (IOException | Exception e) {
^
替代IOException是替代Exception的子类
1 个错误
**查到官方的说明是multi-catch语法时的异常不能有相交. 如IOException是Exception的子类, 所以以后用 | 分隔开的异常不能有父子关系.**
改成这样是可以的:
import java.io.*;
public class Hello {
public static void main(String[] args) {
try {
print();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void print()
throws IOException, ClassNotFoundException {
}
}