Исключение, выданное методом финализации в Java, противоречие в документации Java?

Я только что натолкнулся на два противоречивых предложения в Java 8 Docs и подумал, есть ли здесь кто-нибудь, кто может прояснить реальное поведение.

"Если с помощью метода finalize генерируется неперехваченное исключение, исключение игнорируется, и завершение этого объекта завершается".

-> Если я правильно понял, "неперехваченное исключение" означает, что оно не перехватывается блоком try/catch, и это не имеет никакого отношения к тому, является ли это проверенным или непроверенным исключением.

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

-> Это совершенно противоположное поведение... и что они означают с "но в противном случае игнорируется"? Если это не брошено методом финализации...?

Другие люди задают подобные вопросы, например, другой вопрос stackru, но ответ не был понятен.

Я понимаю "остановлено" как приостановленное - или это то же самое, что прекращено?

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

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        // shutdown logic
    }
});

например, здесь вопрос переполнения стека

Тем не менее, я думаю, что документы Java должны быть ясными и не содержать противоречивых истин.... Или это проблема английского языка...?

1 ответ

Решение

Первое предложение вводит в заблуждение своими словами, но это одно и то же утверждение.

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

В отличие от обычной программы, где необработанное исключение может вызвать сбой всей программы, если finalize выдает исключение, программа просто движется как обычно.

Другие вопросы по тегам