Меня заинтересовало предложение 'throws', и я написал следующий фрагмент кода (я использую Eclipse с Java7). Первоначально я начал только с блоков 1 и 5 (ожидая ошибки компиляции, которой не произошло...), а затем это привело меня к написанию других блоков.
// 1
public void throwNPE() {
throw new NullPointerException();
}
// 2
public void throwNPEWithGenericClause() throws Exception {
throw new NullPointerException();
}
// 3
public void throwNPEWithNPEClause() throws NullPointerException {
throw new NullPointerException();
}
// 4
public void throwNPEWithIAEClause() throws IllegalArgumentException {
throw new NullPointerException();
}
// 5
public void callThrowNPE() {
throwNPE();
}
// 6
public void callThrowNPEWithGenericClause() {
throwNPEWithGenericClause(); // COMPILATION ERROR
}
// 7
public void callThrowNPEWithNPEClause() {
throwNPEWithNPEClause();
}
// 8
public void callThrowNPEWithIAEClause() {
throwNPEWithIAEClause();
}
Честно говоря, я ожидал:
(a) ошибка компиляции в 1. (необработанное исключение? Разве мой метод не должен уведомлять любой «последующий вызывающий объект» о том, что это вызовет какое-то исключение?)
(b) какая-то проблема в 4. (возможно, ошибка компиляции? Я выбрасываю NPE, в то время как в предложении написано IAE)
(c) ошибки компиляции в 5. 6. 7. и 8. (необработанные исключения? Я опускаю предложение 'throws')
(d) возможно, кто-нибудь мог бы также сказать мне, почему 6. является единственным, где я получил ошибку компиляции...
NullPointerException
илиIllegalArgumentException
. - person Pshemo   schedule 12.03.2015