Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 70

Автор Π‘Ρ€ΡŽΡ ЭккСль

Π’ΠΎΡ‡ΠΊΠ° 1

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π’ΠΎΡ‡ΠΊΠ° 1 Π’ΠΎΡ‡ΠΊΠ° 2 Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ

Π’ΠΎΡ‡ΠΊΠ° 1

Π’ΠΎΡ‡ΠΊΠ° 2

Π’ΠΎΡ‡ΠΊΠ° 3

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ

Π’ΠΎΡ‡ΠΊΠ° 1

Π’ΠΎΡ‡ΠΊΠ° 2

Π’ΠΎΡ‡ΠΊΠ° 3

ΠšΠΎΠ½Π΅Ρ†

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ *///;-

Из Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ finally Π½Π΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ сСкции Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° return.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° потСрянных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

К соТалСнию, рСализация ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Java Π½Π΅ обошлась Π±Π΅Π· изъяна. Π₯отя ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сигнализируСт ΠΎΠ± Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΉ ситуации Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π°

ИспользованиС finally с return 335

Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСряно. Π­Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ использовании finally Π² конструкции ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:

//: exceptions/LostMessage.java // Как Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

class VeryImportantException extends Exception { public String toStringO {

return "ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅!";

}

}

class HoHumException extends Exception { public String toStringO {

return "ВторостСпСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅";

}

}

public class LostMessage {

void fO throws VerylmportantException {

throw new VerylmportantExceptionO;

}

void disposeO throws HoHumException { throw new HoHumExceptionO;

}

public static void main(String[] args) { try {

LostMessage 1m = new LostMessageO; try {

lm.fO; } finally {

lm. disposeO; } catch(Exception e) {

System.out.println(e);

}

}

} /* Output:

ВторостСпСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ *///:-

Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² VerylmportantException, ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ просто Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ HoHumException Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ finally. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ потСря ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ скрытой ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ диагностируСмой ситуации, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. НапримСр, Π² Π‘++ подобная ситуация (Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ) рассматриваСтся ΠΊΠ°ΠΊ грубая ошибка программиста. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях Java эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π° (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, любой ΠΌΠ΅Ρ‚ΠΎΠ΄, способный Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€” Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ dispose() Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ try-catch).

Π•Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ простым Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ ΠΈΠ· finally:

И: exceptions/ExceptionSi1encer.java

public class ExceptionSilencer {

public static void main(String[] args) { try {

throw new RuntimeExceptionO: } finally {

// Команда 'return' Π² Π±Π»ΠΎΠΊΠ΅ finally // ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ return;

}

}

} ///.-

Запустив эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ β€” нСсмотря Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ использовании ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π’ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ описаны Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом, автоматичСски смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΌ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ООП), Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Π²ΠΈΠ΄Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (Π²ΠΎ врСмя компиляции), Π½Π°Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

//: exceptions/Stormylnning java // ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ // ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, описанныС Π² вСрсии Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, // ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, унаслСдованныС ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ // Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

class BaseballException extends Exception {} class Foul extends BaseballException {} class Strike extends BaseballException {}

abstract class Inning {

public InningO throws BaseballException {} public void event О throws BaseballException { // РСальноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ возбуТдаСтся

}

public abstract void atBatO throws Strike. Foul;

public void walkO {} // He Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

}

class StormException extends Exception {} class RainedOut extends StormException {} class PopFoul extends Foul {}

interface Storm {

public void event() throws RainedOut; public void rainHardO throws RainedOut;

}

public class Stormylnning extends Inning implements Storm { // МоТно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для конструкторов. // Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ конструктора; public StormyInning()

throws RainedOut. BaseballException {}

public StormyInning(String s)

throws Foul. Baseball Exception {} // ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ: //! void walkO throws PopFoul {} // Ошибка компиляции // Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ ΠœΠžΠ–Π•Π’ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ // ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса: //! public void event О throws RainedOut {} // Если ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ // классС, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ допускаСтся, public void rainHardO throws RainedOut {} // ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π²ΠΎΠΎΠ±Ρ‰Π΅. // Π΄Π°ΠΆΠ΅ Ссли базовая вСрсия это Π΄Π΅Π»Π°Π΅Ρ‚: public void eventО {} // ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ // унаслСдованныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: public void atBatO throws PopFoul {} public static void main(String[] args) { try {

Stormy Inning si = new Stormy I nningO; si atBatO: } catch(PopFoul e) {

System.out.println("Pop foul"); } catch(RainedOut e) {

System.out printlnCRained out"): } catch(BaseballException e) {

System.out.println("ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ");

}

// Strike Π½Π΅ возбуТдаСтся Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ вСрсии, try {

// Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ восходящСм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ? Inning i = new StormylnningO: i. atBatO:

// НСобходимо ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· // Π±Π°Π·ΠΎΠ²ΠΎΠΉ вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: } catch(Strike Π΅) {

System.out.println("Strike"); } catch(Foul e) {

System.out.println("Foul"): } catch(RainedOut e) {

System.out.println("Rained out"): } catch(BaseballException e) {

System.out.println("ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅"):

}

}

} III-

Π’ классС Inning ΠΈ конструктор, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ event() ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚. Π­Ρ‚ΠΎ допустимо, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ заставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС Π²ΠΈΠ΄Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° event(). Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ распространяСтся ΠΈ Π½Π° абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° atBat().

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Storm интСрСсСн Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ (event()), ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС Inning, ΠΈ ΠΎΠ΄ΠΈΠ½ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ. Оба ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ RainedOut. Когда класс Stormylnning Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Inning ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Storm, выясняСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ event() ΠΈΠ· Storm Π½Π΅ способСн ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° event() класса Inning. ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ это Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ Π±Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π½Π°Π»ΠΈ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π»ΠΈ Π½ΡƒΠΆΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² случаС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, описанный Π² интСрфСйсС, отсутствуСт Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС (ΠΊΠ°ΠΊ rainHard()), Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄ StormyInning.walk() Π½Π΅ компилируСтся ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Inning.walk() Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Если Π±Ρ‹ это позволялось, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Inning.walk() ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ подстановкС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Inning, Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обСспСчивая соотвСтствиС спСцификаций ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… вСрсиях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Java добиваСтся взаимозамСняСмости ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ event() ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π΄Π°ΠΆΠ΅ Ссли это дСлаСтся Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ вСрсии. ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ влияСт Π½Π° ΡƒΠΆΠ΅ написанный ΠΊΠΎΠ΄ β€” подразумСваСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Аналогичная Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° atBat(), Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PopFoul, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅ ΠΎΡ‚ Foul, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ возбуТдаСтся Π±Π°Π·ΠΎΠ²ΠΎΠΉ вСрсиСй atBat(). Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с Inning ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ atBat(), Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Foul. Π’Π°ΠΊ ΠΊΠ°ΠΊ PopFoul наслСдуСт ΠΎΡ‚ Foul, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для Foul ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΈ PopFoul.

ПослСдний интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ встрСчаСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main(). ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Stormylnning компилятор заставляСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ для этого класса, Π½ΠΎ ΠΏΡ€ΠΈ восходящСм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ компилятор заставляСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. ВсС эти ограничСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ19.

Π₯отя компилятор заставляСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ наслСдовании, спСцификация ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ объявлСния (сигнатуры) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². БоотвСтствСнно, нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ спСцификациям ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, Π΄Π°ΠΆΠ΅ Ссли спСцификация ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ присутствуСт Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, это вовсС Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ сущСствования Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Данная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° сильно отличаСтся ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» наслСдования, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ присутствуСт ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, «интСрфСйс спСцификации ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉΒ» для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² процСссС наслСдования ΠΈ пСрСопрСдСлСния, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒΡΡ β€” ΠΈ это прямая ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ интСрфСйсу класса Π²ΠΎ врСмя наслСдования.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ всСгда ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΠΉΡ‚Π΅ сСбя: «Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ всС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ?Β» Π§Π°Ρ‰Π΅ всС ΠΈΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ бСзопасно, Π½ΠΎ с конструкторами Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ дСйствиС β€” Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° β€” ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ освободит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Ρ‹Π·Π²Π°Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² конструкторС, эти Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ дСйствия ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ исполнСны ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ. А это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ написании конструкторов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Ρ‚ΡŒ особСнно Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

Казалось Π±Ρ‹, Π±Π»ΠΎΠΊ finally Ρ€Π΅ΡˆΠ°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Но Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всС слоТнСС β€” вСдь finally выполняСтся всСгда, ΠΈ Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если сбой Π² конструкторС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π³Π΄Π΅-Ρ‚ΠΎ Π½Π° сСрСдинС, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, освобоТдаСмая Π² finally, Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»Π° создана.