Я только что наткнулся на два противоречивых предложения в Java 8 Docs и подумал, есть ли здесь кто-нибудь, кто может прояснить реальное поведение.Исключение, вызванное методом finalize в Java, противоречие в Java-документах?
«Если исключающее исключение выбрано методом finalize, исключение игнорируется и завершение этого объекта завершается».
-> Если я понял, что это «неперехваченное исключение» означает, что оно не попадает в блок try/catch, и это не имеет никакого отношения к тому, является ли это проверенным или неконтролируемым исключением.
«Любое исключение, вызванное методом finalize, заставляет завершить завершение этого объекта, но в противном случае игнорируется».
-> Это совершенно противоположное поведение ... и что они означают с «но иначе игнорируется»? Если это не выдается методом finalize ...?
Другие люди задают аналогичные вопросы, например. other stackoverflow question, но ответ был непонятен.
Я понимаю, что «остановлен» как приостановлено - или это то же самое, что и прекращено?
К слову: Я выяснил, что на самом деле это плохая практика, чтобы попытаться полагаться на финализацию, поскольку нет никакой гарантии, что она когда-либо называется (даже System.gc() не вынуждает ее и предлагает только компилятор, который сбор мусора необходим). Некоторые люди рекомендуют вместо этого использовать крюк отключения:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// shutdown logic
}
});
, например. здесь stack overflow question
Все еще я думаю, что документы Java должны быть ясными и не противоречить противоречивым истинам .... Или это проблема английского языка ...?
Я не вижу, что они противоречивы. Статьи «исключение игнорируется» и «завершение этого объекта завершается» не находятся в самом ясном порядке; но я читал их, как грубо говоря то же самое. –
Средство: «завершает» == «остановлено»? – Nina
Да (это означает остановку) – alexbt