Бросает против 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; 
}
Другие вопросы по тегам