В Java, какую цель выполняют ключевые слова `final`,` finally` и `finalize`? - PullRequest
82 голосов
/ 19 октября 2011

Какую цель выполняют на Java ключевые слова final, finally и finalize?

Ответы [ 6 ]

269 голосов
/ 19 октября 2011

окончательный

final может использоваться для пометки переменной "неизменяемой"

private final String name = "foo";  //the reference name can never change

final также может сделать метод не "переопределенным"

public final String toString() {  return "NULL"; }

final также может сделать класс не "наследуемым". то есть класс не может быть разделен на подклассы.

public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed

наконец

finally используется в операторе try / catch для выполнения кода «always»

lock.lock();
try {
  //do stuff
} catch (SomeException se) {
  //handle se
} finally {
  lock.unlock(); //always executed, even if Exception or Error or se
}

В Java 7 есть новая попытка с оператором ресурсов , которую вы можете использовать для автоматического закрытия ресурсов, которые явно или неявно реализуют java.io.Closeable или java.lang. Автозаполнение

завершить

finalize вызывается, когда объект собирается мусором. Вам редко нужно переопределять это. Пример:

protected void finalize() {
  //free resources (e.g. unallocate memory)
  super.finalize();
}
18 голосов
/ 19 октября 2011
  • «Финал» означает, что что-то не может быть изменено. Обычно вы хотите использовать это для статических переменных, которые будут иметь одно и то же значение на протяжении всей жизни вашей программы.
  • «Наконец» используется вместе с блоком try / catch. Все, что находится внутри предложения «finally», будет выполнено независимо от того, выдает ли код в блоке «try» исключение.
  • «Завершить» вызывается JVM перед сборкой мусора.
6 голосов
/ 07 августа 2014

final: final - ключевое слово. Переменная, объявленная как final, должна быть инициализирована только один раз и не может быть изменена.Классы Java, объявленные как final, не могут быть расширены.Методы, объявленные как final, не могут быть переопределены.

finally: finally - это блок. Блок finally всегда выполняется при выходе из блока try.Это гарантирует, что блок finally выполняется даже в случае непредвиденного исключения.Но, наконец, полезно не только для обработки исключений, но и позволяет программисту избежать случайного обхода кода очистки при возврате, продолжении или разрыве.Помещение кода очистки в блок finally - это всегда хорошая практика, даже если не ожидается никаких исключений.

finalize: finalize - это метод. Перед тем, как объект будет собран, системные вызовы среды выполненияего метод finalize ().Вы можете написать код освобождения системных ресурсов в методе finalize () перед сборкой мусора.

6 голосов
/ 19 октября 2011

Последнее ключевое слово используется для объявления констант.

final int FILE_TYPE = 3;

Ключевое слово finally используется в операторе try catch, чтобы указать блок кода для выполнения независимо от выданных исключений.

try
{
  //stuff
}
catch(Exception e)
{
  //do stuff
}
finally
{
  //this is always run
}

И, наконец (хаха), finalize, я не совсем уверен, что это ключевое слово, но в классе Object есть функция finalize () .

6 голосов
/ 19 октября 2011

http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/

final - объявление константы.

finally - блок finally всегда выполняется при выходе из блока try, кроме вызова System.exit (0). Это гарантирует, что блок finally выполняется даже в случае непредвиденного исключения. Но, наконец, полезно не только для обработки исключений, но и позволяет программисту избежать случайного обхода кода очистки при возврате, продолжении или разрыве. Размещение кода очистки в блоке finally всегда является хорошей практикой, даже если исключений не ожидается.

finalize () - метод помогает в сборке мусора. Метод, который вызывается перед тем, как объект удаляется сборщиком мусора, позволяя ему очистить свое состояние. Не следует использовать для освобождения ресурсов, не связанных с памятью, таких как файловые дескрипторы, сокеты, соединения с базой данных и т. Д., Поскольку Java имеет только конечное число этих ресурсов, и вы не знаете, когда начнется сборка мусора для освобождения этих ресурсов, не связанных с памятью через метод finalize ().

Вы пытались искать в Google, и вам нужны пояснения для объяснения?

2 голосов
/ 06 марта 2016

1.Final • Final используется для наложения ограничений на класс, метод и переменную.• Финальный класс не может быть унаследован, конечный метод не может быть переопределен и окончательное значение переменной не может быть изменено.• Конечные переменные инициализируются во время создания, за исключением случая, когда пустая конечная переменная инициализируется в Конструкторе.• Окончательный вариант - это ключевое слово.

2.Наконец, • Наконец, используется для обработки исключений вместе с try и catch.• Будет выполнено независимо от того, обработано ли исключение.• Этот блок используется для закрытия ресурсов, таких как соединение с базой данных, ресурсы ввода / вывода.• Наконец, блок.

3.Finalize • Finalize вызывается потоком сборки мусора непосредственно перед сбором подходящих объектов для выполнения очистки.• Это последний шанс для объекта выполнить какую-либо очистку, но поскольку не гарантируется, будет ли вызываться finalize (), это плохая практика сохранять ресурсы до завершения вызова.• Завершить - это метод.

...