Рекомендуємо, 2024

Вибір Редакції

Різниця між фіналом, нарешті і завершенням в Java

Слова «остаточний, нарешті, і завершення» лежать в контексті Java. Кожен з них забезпечується іншим функціонуванням. Основна відмінність між остаточним, нарешті, і завершенням полягає в тому, що остаточним є модифікатор доступу, нарешті, блок і завершення - це метод об'єктного класу. Є деякі інші відмінності між остаточним, нарешті, і завершенням, які обговорюються на діаграмі порівняння.

Діаграма порівняння

Основа для порівнянняФіналНарештіЗавершити
ОсновнийФінал - це ключове слово і модифікатор доступу в Java.Нарешті, це "блок" в Java.Завершення - це "метод" на Java.
ЗастосовуєтьсяФінальним є ключове слово, що застосовується до класів, змінних і методів.Нарешті, це блок, який завжди пов'язаний з блоком try і catch.finalize () - метод, застосовний до об'єктів.
Робота(1) Остаточна змінна стає постійною, і її не можна перепризначити.
(2) Остаточний метод не може бути перевизначений дочірнім класом.
(3) Випускний клас не може бути продовжений.
Блок "нарешті", очищає ресурси, що використовуються в блоці "try".Метод фіналізації виконує очищення діяльності, пов'язаної з об'єктом, до її знищення.
ВиконанняОстаточний метод виконується після його виклику."Нарешті" блок виконується відразу після виконання блоку "try-catch".Метод finalize () виконується безпосередньо перед руйнуванням об'єкта.

Визначення фіналу

"Final" - це ключове слово в Java. Це модифікатор доступу. Ключове слово "final" застосовується до класів, методів і змінних. Подивимося, як вона працює з кожним з них.

Кінцева змінна

  • Коли до змінної застосовується остаточне ключове слово, воно не може бути додатково змінено.
  • Остаточна змінна повинна бути ініціалізована, коли вона оголошена.
  • У загальній конвенції кодування кінцеві змінні оголошуються в UPPERCASE.
  • Кінцева змінна не займає пам'ять на основі кожного примірника.
 final int FILE_OPEN = 2; 

Заключні методи

  • Коли метод у класі оголошується як остаточний, його не можна перекривати підкласом.
  • Невеликі методи, які оголошені остаточними, можуть бути зроблені компілятором "inline", що зменшить накладні витрати на виклик функції і підвищить продуктивність.
  • Виклик перевизначених методів вирішується динамічно, але коли метод оголошений остаточним, його не можна перевизначити. Таким чином, виклик функції може бути вирішений під час компіляції.
 class A {final void meth () {System.out.println ("Це остаточний метод."); }} клас B розширює {void meth () {// Clas B не може наслідувати метод класу A. System.out.println ("Не перевизначає"); }} 

Заключний клас

  • Коли клас оголошується як остаточний, то він не може бути успадкований будь-яким підкласом.
  • Оголошення класу як остаточне автоматично оголошує всі його методи кінцевими.
  • Ви не можете оголосити клас як «абстрактним» і «остаточним».
 Остаточний клас A {// ...} клас B розширює A {// Клас B не може наслідувати клас A // ...} 

Визначення Нарешті

  • У Java "finally" - це блок, який завжди пов'язаний з блоком try / catch.
  • Блок «нарешті» виконується після блоку try / catch і перед кодом блоку try / catch.
  • Блок «нарешті» виконуватиме, чи буде виключено виключення.
  • Коли виключення викидається, і жодний блок вилучення не збігається з виключенням, то виконується блок "нарешті".
  • Коли метод повертається до абонента з блоку try / catch через виключення або невизначений оператор return, блок "нарешті" виконується безпосередньо перед тим, як метод повертається до абонента.
  • Блок «нарешті» використовується для очищення ресурсів або звільнення пам'яті, що використовується в блоці «try».
  • Блок «нарешті» є необов'язковим, але хороша практика, нарешті, писати блок після блоку try / catch.
 class FinallyExample {// Цей метод кидає виняток з методу. static void procA () {try {System.out.println ("всередині procA"); кинути новий RuntimeException ("demo"); } нарешті {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 ("нарешті procC's"); } public public void main (String args []) {try {procA (); } catch (Exception e) {System.out.println ("Виняток спійманий"); } procB (); procC (); }} // вихід всередині procA, нарешті, виняток, отриманий всередині procB, нарешті всередині procC 

Визначення фіналізації

  • Finalize - метод у класі об'єктів.
  • Об'єкт може містити деякі не-Java ресурси, такі як ручка файлу; тоді вона повинна бути звільнена, перш ніж вона буде знищена.
  • Цей метод викликається збирачем сміття, перш ніж повністю знищить об'єкт.
  • Цей метод виконує очищення об'єкта перед його знищенням.

Загальна форма методу finalize () є наступною.

 protected void finalize () {// тут код завершення} 

Метод finalize оголошується захищеним, так що до нього не можна звертатися за межі класу.

Цей метод завжди викликається перед збором сміття.

Ключові відмінності між фіналом, нарешті, і завершенням

  1. Ключове слово final є модифікатором доступу, нарешті, є блоком і завершується є методом.
  2. Ключове слово final є застосовним до класів, змінних і методів класів, нарешті - це блок, пов'язаний з блоком try catch, який використовується для обробки виключень, finalize - метод, який працює тільки на об'єктах.
  3. Змінна, що оголошується як фінальна, стає постійною і не може бути перепризначена знову, метод, оголошений остаточним, не може бути перевизначений, і клас, що оголошений як остаточний, ніколи не може бути успадкований. Блок нарешті використовується для очищення ресурсів, використовуваних блоком try і catch. Метод finalize використовується для очищення ресурсів, що використовуються об'єктом, перш ніж об'єкт буде знищено.

Висновок:

Остаточний, остаточний і завершений має інший ефект при застосуванні на методі.

Top