
Сравнителна таблица
Основа за сравнение | Финал | накрая | Финализиране |
---|---|---|---|
Основен | Финалът е "Ключова дума" и "модификатор на достъп" в Java. | Накрая е "блок" в Java. | Финализирането е "метод" в Java. |
приложим | Final е ключова дума, приложима за класове, променливи и методи. | Накрая е блок, който винаги е свързан с блока try и catch. | finalize () е метод, приложим за обекти. |
работната | (1) Крайната променлива става постоянна и не може да бъде преназначена. (2) Крайният метод не може да бъде заменен от класа на детето. (3) Крайният клас не може да бъде удължен. | А "накрая" блок, почистване на ресурсите, използвани в "опитайте" блок. | Методът за финализиране извършва почистване на дейностите, свързани с обекта, преди неговото унищожаване. |
Екзекуция | Окончателният метод се изпълнява при неговото повикване. | "Накрая" блок се изпълнява веднага след изпълнението на "try-catch" блок. | Методът finalize () се изпълнява точно преди унищожаването на обекта. |
Определение за финал
“Final” е ключова дума в Java. Това е модификатор за достъп. Ключовата дума „окончателно“ е приложима за класовете, методите и променливите. Нека видим как работи с всяка от тях.
Крайна променлива
- Когато към променливата се прилага крайна ключова дума, тя не може да бъде допълнително модифицирана.
- Крайната променлива трябва да се инициализира, когато бъде декларирана.
- В обща конвенция за кодиране, крайните променливи се декларират в UPPERCASE.
- Крайната променлива не заема памет за всеки отделен случай.
final int FILE_OPEN = 2;
Заключителни методи
- Когато даден метод в клас, е обявен за окончателен, той не може да бъде отменен от подкласа му.
- Малките методи, които са обявени за крайни, могат да бъдат направени "вградени" от компилатора, което ще намали натоварването на функционалното извикване и ще увеличи подобренията в производителността.
- Извикването на подменени методи се разрешава динамично, но когато методът е обявен за окончателен, той не може да бъде отменен. Следователно функционалното извикване може да бъде разрешено по време на компилиране.
class A {окончателен void meth () {System.out.println ("Това е окончателен метод."); }} клас В разширява A {void meth () {// Clas B не може да наследи метода от клас A. System.out.println ("Не заменя"); }}
Краен клас
- Когато даден клас е обявен за окончателен, той не може да бъде наследен от всеки подклас.
- Обявяването на класа като окончателен автоматично ще обяви всичките му методи окончателни.
- Не можете да обявите клас като „абстрактно“ и „окончателно“.
краен клас A {// ...} клас B разширява A {// клас B не може да наследи клас A // ...}
Дефиниция на накрая
- В Java “накрая” е блок, който винаги е свързан с блока try / catch.
- Блокът "накрая" се изпълнява след блока try / catch и преди кода, следвайки блока try / catch.
- Блокът "накрая" ще изпълни дали изключението е хвърлено или не.
- Когато бъде хвърлено изключение и няма блокиращ блок, който да съвпада с изключението, блокът "накрая" се изпълнява.
- Когато метод се върне към повикващия от блока try / catch чрез нечувано изключение или изрично декларация за връщане, блокът "finally" се изпълнява точно преди методът да се върне към повикващия.
- Блокът "накрая" се използва за почистване на ресурсите или за освобождаване на паметта, използвана в блока "опитайте".
- Блокът "накрая" не е задължителен, но е добра практика да се пише окончателно блок след блока try / catch.
class FinallyExample {// Този метод изхвърля изключение от метода. static void procA () {try {System.out.println ("вътре в procA"); хвърли нов RuntimeException ("демо"); } накрая {System.out.println ("накрая procA's"); }} // Връщаме се от блока try. static void procB () {try {System.out.println ("вътре в procB"); се върне; } накрая {System.out.println ("накрая procB's"); }} // Изпълнете нормално блок за опит. static void procC () {try {System.out.println ("вътре в procC"); } накрая {System.out.println ("накрая"); } public public void main (String args []) {try {procA (); } catch (Exception e) {System.out.println ("Уловена изключение"); } procB (); procC (); }} // изходът в края на procA на procA е изключен в procB накрая
Определение за финализиране
- Finalize е метод в клас обект.
- Един обект може да съдържа някои не-Java ресурси, като например файлова дръжка; тогава трябва да бъде освободен, преди да бъде унищожен.
- Този метод се извиква от сборника за боклук, преди да унищожи напълно обекта.
- Този метод извършва дейности по почистване на обекта, преди да бъде унищожен.
Общата форма на метода finalize () е следната.
protected void finalize () {// тук финализиращия код}
Методът за финализиране е обявен за защитен, така че да не може да бъде достъпен отвън клас.
Този метод винаги се нарича преди събирането на боклука.
Ключови разлики между финала, финала и финализиране
- Ключовата дума final е модификатор за достъп, накрая е блок и финализирането е метод.
- Ключовата дума final е приложима за класовете, променливите и методите на класовете, накрая е блок, асоцииран с блока try try, който се използва за обработка на изключения, финализирането е метод, който работи само върху обекти.
- Променливата, веднъж декларирана като окончателна, става постоянна и не може да бъде преназначена отново, метод, обявен за окончателен, не може да бъде заменен, а класът, веднъж обявен за окончателен, никога не може да се наследи. Накрая блокът се използва за почистване на ресурсите, използвани от блока try и catch. Методът finalize се използва за почистване на ресурсите, използвани от обект, преди да бъде унищожен обектът.
Заключение:
Окончателен, накрая и финализиран има различен ефект, когато се прилага по метод.