diff --git a/core.md b/core.md index 1933d8f..14bf6a5 100644 --- a/core.md +++ b/core.md @@ -869,6 +869,62 @@ public class MainClass { Метод `finalize()` вызывается перед тем как сборщик мусора будет проводить удаление объекта. +Пример: +```java + +public class MainClass { + + public static void main(String args[]) { + TestClass a = new TestClass(); + System.out.println("result of a.a() is " + a.a()); + a = null; + System.gc(); // Принудительно зовём сборщик мусора + a = new TestClass(); + System.out.println("result of a.a() is " + a.a()); + System.out.println("!!! done"); + } + +} +``` + +```java +public class TestClass { + + public int a() { + try { + System.out.println("!!! a() called"); + throw new Exception(""); + } catch (Exception e) { + System.out.println("!!! Exception in a()"); + return 2; + } finally { + System.out.println("!!! finally in a() "); + } + } + + @Override + protected void finalize() throws Throwable { + System.out.println("!!! finalize() called"); + super.finalize(); + } +} +``` + +Результат выполнения: + +``` +!!! a() called +!!! Exception in a() +!!! finally in a() +result of a.a() is 2 +!!! a() called +!!! Exception in a() +!!! finally in a() +!!! finalize() called +result of a.a() is 2 +!!! done +``` + [к оглавлению](#java-core) ## Расскажите про приведение типов. Что такое понижение и повышение типа?