Бросает против Java байт-код
throws
Список методов, очевидно, играет роль при компиляции. Однако оказывает ли это какое-либо влияние во время выполнения?
Например, если у меня есть метод без throws
список и использовать темную магию байт-кода, чтобы вызвать и бросить IncrediblyCheckedException
Будет ли он выдавать это без вопросов, или валидатор времени выполнения заметит это и выдаст ошибку или что-то вместо этого?
1 ответ
Решение
Это никак не влияет на время выполнения. Дело в точке:
Thread.currentThread.stop(new Exception());
может быть написано где угодно, и строка кода вызовет исключение.
Выше приведено исключение из нативного кода, но вот еще один трюк с простой Java throw
:
public static void main(String[] args) {
CurrentClass.<RuntimeException>sneakyThrow(new Exception());
}
@SuppressWarnings("unchecked")
private static <E extends Throwable> void sneakyThrow(Throwable t) throws E {
throw (E)t;
}