WedX - журнал о программировании и компьютерных науках

Поведение выполнения вызова метода с проверенным исключением во время выполнения без его перехвата

Предположим, у меня есть вызывающий класс с именем, скажем, A в файле jar a.jar, который вызывает метод, скажем, B.b() в отдельном файле jar b.jar.

Пока там все ок.

Теперь разработчики пакетов B добавляют проверенное исключение в B.b(), которое становится чем-то вроде того, как B.b() генерирует исключение и повторно развертывает файл b.jar. Файл a.jar остается нетронутым, нетронутым, поэтому разработчики пакета A не замечают ошибки компиляции, требующей немедленного перехвата исключения.

Что произойдет во время выполнения? Точнее, как с этим справляется JVM. Из моего опыта, но на удивление, он работает гладко в том случае, когда во время выполнения на самом деле не создаются исключения. Получается, что разрешение метода выполняется, даже если сигнатура не совпадает на уровне исключения. С другой стороны, если B.b() действительно выдает исключение, я понятия не имею, что произойдет. Указано ли это поведение где-то в спецификации языка JVM или Java, или оно зависит от разработчика JVM или, возможно, даже настраивается с помощью некоторых параметров флагов JVM?

Спасибо за ваши разъяснения

03.09.2020

  • 1. Объявленные исключения не влияют на связывание методов во время выполнения. 2. Проверенные исключения отличаются от непроверенных исключений только во время компиляции. Нет никакой разницы во времени выполнения ни для генерации, ни для перехвата исключений. Вы можете думать об этом, как если бы каждый метод объявлял throws Throwable 03.09.2020
  • Вы можете легко разрушить систему проверки исключений даже в пределах одного класса, используя другую функцию только времени компиляции, Generics. См. этот ответ, особенно пример в конце. 04.09.2020

Ответы:


1

Исключения не являются частью сигнатуры метода, по крайней мере, для определения того, какой метод предназначен. Кроме того, на уровне виртуальной машины не существует такого понятия, как «проверенное исключение». Вы можете выбрасывать что угодно, даже если сигнатура вашего метода не объявляет это. Как вы думаете, как работает SneakyThrows или scala от lombok?

03.09.2020
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]