?????????????????Java???????????????????????????"Oak"??OO????????????C++?????????Java????????applets??????С???????????????????????
????????????????????????????????????????????????Java?????????????Щ????????顣
????1. ?????????????????????
????????JVM??????????????????????????????Java??????
???????????????????????????????Bruce Eckel???????????GeeCON????????????????Java????б??????????????????????????????Java 8???μ?Streams API??????????????????????????lambda?????????IO????JDBC???????????????
???????????JVM????????????????????????δ???
public class Test {
// No throws clause here
public static void main(String[] args) {
doThrow(new SQLException());
}
static void doThrow(Exception e) {
Test.<RuntimeException> doThrow0(e);
}
@SuppressWarnings("unchecked")
static <E extends Exception>
void doThrow0(Exception e) throws E {
throw (E) e;
}
}
??????????????????????????????SQLException???????????????????Lombok??@SneakyThrows???
?????????????????????????????£?????Stack Overflow??????????
????2. ???????????????????з???????
????????????????????
????class Test {
????Object x() { return "abc"; }
????String x() { return "123"; }
????}
????????Java??????????????????г?????????д????"override-equivalent"??????????????????throws?????????????????????
????????????????Java????е? Class.getMethod(String?? Class...)?????????????д????
????????Java???????????????е???????????????????????????????JVM???????????????????п???????????????????????????????????????????????????????????????????????????????bridge?????????Э?????covariant return?????鷽????????????????????????????bridge?????????д??????????????????????????????????
??????????е??????????????????δ???????????????
????abstract class Parent<T> {
????abstract T x();
????}
????class Child extends Parent<String> {
????@Override
????String x() { return "abc"; }
????}
?????????Child??????????????
// Method descriptor #15 ()Ljava/lang/String;
// Stack: 1?? Locals: 1
java.lang.String x();
0  ldc <String "abc"> [16]
2  areturn
Line numbers:
[pc: 0?? line: 7]
Local variable table:
[pc: 0?? pc: 3] local: this index: 0 type: Child
// Method descriptor #18 ()Ljava/lang/Object;
// Stack: 1?? Locals: 1
bridge synthetic java.lang.Object x();
0  aload_0 [this]
1  invokevirtual Child.x() : java.lang.String [19]
4  areturn
Line numbers:
[pc: 0?? line: 1
?????????????T?????Object??????????????????????
????synthetic bridge?????????????????????????????????Parent.x()?????????????????Object???????????????????????bridge???????????????????????????????????????JVM????????????ò????????Щ????????????Э???????????????????? ????
????????????????Java?????淶????????????????????????????????