2013-03-14 2 views
0

Я хочу понять распространение исключений в java на уровне нитей.Как распространяются исключения?

Я понимаю, что когда когда-либо код генерирует исключение, и если метод не обрабатывает это исключение, то он хранится в стеке этого потока, и jvm просто выталкивает вызовы методов из стека, если исключение не обрабатывается. Этот метод применим как к проверенным, так и к непроверенным исключениям. Пожалуйста, поправьте меня, если я ошибаюсь.

С приведенным выше объяснением я не могу понять, как выполняются исключения в статическом блоке, потому что они будут вызваны во время загрузки класса.

Любые идеи по этому вопросу?

+2

Пожалуйста, проверьте эту тему http://stackoverflow.com/questions/2070293/exception-in-static-initialization-block –

ответ

1

Код внутри статического блока также выполняется в потоке (даже если он действительно вызван в времени инициализации класса), и поэтому та же стратегия применяется к неконтролируемым исключениям, выведенным из статического блока.

Обратите внимание, что вы получите ошибку компиляции, если ваш код выдает исключенное исключение из статического блока.

1

Java строго и точно определяет момент, при котором класс инициализируется (в отличие от загружен, BTW!). Это всегда вызвано некоторым Java-кодом, поэтому конкретная строка кода Java, запускающая класс init, получит исключение. Магии нет, нет особых случаев, и это всегда происходит во время выполнения, как и любые другие исключения.

Смежные вопросы