В Java, с какой целью сделать ключевые слова final
, finally
и finalize
выполнить?
В Java, с какой целью сделать ключевые слова final
, finally
и finalize
выполнить?
Ответы:
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 для выполнения кода "всегда"
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.AutoCloseable
finalize
вызывается, когда объект собирается сборщиком мусора. Вам редко нужно его отменять. Пример:
protected void finalize() {
//free resources (e.g. unallocate memory)
super.finalize();
}
Object#finalize()
метод устарел в Java 9 ( JDK-8165641 ).
Последнее ключевое слово используется для объявления констант.
final int FILE_TYPE = 3;
Ключевое слово finally используется в операторе try catch для указания блока кода, который должен выполняться независимо от выданных исключений.
try
{
//stuff
}
catch(Exception e)
{
//do stuff
}
finally
{
//this is always run
}
И наконец (ха-ха), finalize im не совсем уверен, что это ключевое слово, но в классе Object есть функция finalize () .
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 и нуждаетесь в пояснении?
final: final - ключевое слово. Переменная, объявленная как final, должна быть инициализирована только один раз и не может быть изменена. Классы Java, объявленные как final, не могут быть расширены. Методы, объявленные как final, не могут быть переопределены.
наконец: наконец-то блок.Блок finally всегда выполняется при выходе из блока try. Это гарантирует выполнение блока finally даже в случае возникновения непредвиденного исключения. Но наконец, он полезен не только для обработки исключений - он позволяет программисту избежать случайного обхода кода очистки при возврате, продолжении или прерывании. Помещение кода очистки в блок finally всегда является хорошей практикой, даже если не ожидается никаких исключений.
завершить: finalize - это метод. Перед сборкой мусора исполняющая система вызывает его метод finalize (). Вы можете написать код освобождения системных ресурсов в методе finalize () перед сборкой мусора.
1. Заключительный • Final используется для наложения ограничений на класс, метод и переменную. • Конечный класс не может быть унаследован, конечный метод не может быть переопределен, а конечное значение переменной не может быть изменено. • Конечные переменные инициализируются во время создания, за исключением случая пустой конечной переменной, которая инициализируется в Конструкторе. • Final - ключевое слово.
2. Наконец • Наконец, используется для обработки исключений вместе с попыткой и отловом. • Он будет выполняться независимо от того, обработано ли исключение или нет. • Этот блок используется для закрытия ресурсов, таких как соединение с базой данных, ресурсы ввода-вывода. • Наконец, блок.
3. Завершить • Finalize вызывается потоком сборки мусора непосредственно перед сбором подходящих объектов для выполнения очистки. • Это последний шанс для объекта выполнить какую-либо очистку, но поскольку не гарантируется, будет ли вызван finalize (), плохая практика - сохранять ресурс до вызова finalize. • Завершить - это метод.
Значение final в java: -применяется к переменной, означает, что соответствующая переменная после инициализации больше не может быть изменена
private final double numer = 12;
Если вы попытаетесь изменить это значение, вы получите сообщение об ошибке.
-применяется к методу означает, что соответствующий метод не может быть переопределен
public final void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
Но метод final может быть унаследован, потому что ключевое слово final ограничивает переопределение метода.
-применяется к классу означает, что соответствующий класс не может быть расширен.
class Base
{
public void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
}
Смысл слова finally:
class TestFinallyBlock{
public static void main(String args[]){
try{
int data=25/5;
System.out.println(data);
}
catch(NullPointerException e){System.out.println(e);}
finally{System.out.println("finally block is always executed");}
System.out.println("rest of the code...");
}
}
в этом примере, даже если try-catch выполняется или нет, то, что находится внутри finally, всегда будет выполняться. Смысл доработки:
class FinalizeExample{
public void finalize(){System.out.println("finalize called");}
public static void main(String[] args){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1=null;
f2=null;
System.gc();
}}
перед вызовом сборщика мусора.