Я предполагаю, что вы пытаетесь выбросить подкласс исключения, который не объявлен методом как тип исключения, который он может выбросить.
Следующий пример работает
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws Exception{
try {
int value = 1/0;
} catch (Exception e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
Однако этот пример выдаст ошибку.
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws RuntimeException{
try {
int value = 1/0;
} catch (Exception e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
Обратите внимание, что во втором примере я просто ловлю Exception, а не RuntimeException, он не скомпилируется, так как я генерирую Exception, который является необъявленным броском, даже если я делаю это.объявляет RuntimeException.
Да, исключение - RuntimeException, но компилятор этого не знает.
Просто подумал о третьем рабочем примере, чтобы показать вам.Этот также работает, потому что вы бросаете тот же тип, что и вы объявляете.(обратите внимание, что единственным изменением является блок catch)
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws RuntimeException{
try {
int value = 1/0;
} catch (RuntimeException e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
Вам необходимо понять различия между всеми этими тремя ответами