Otázky týkajúce sa rozhovoru Java

1. Úvod

Tento článok obsahuje odpovede na niektoré z najdôležitejších otázok týkajúcich sa pracovných pohovorov týkajúcich sa základnej Javy. Odpovede na niektoré z nich nemusia byť zrejmé, takže tento článok pomôže objasniť veci.

2. Otázky týkajúce sa jazyka Core-Java pre začiatočníkov

Q1. Prenášajú sa údaje v Jave referenciou alebo hodnotou?

Aj keď je odpoveď na túto otázku dosť jednoduchá, pre začiatočníkov môže byť táto otázka mätúca. Najprv si ujasnime, o čo ide v otázke:

  1. Predávanie podľa hodnoty - znamená to, že prechádzame kópia objektu ako parameter do metódy.
  2. Okolo referencie - znamená to, že prechádzame odkaz na objekt ako parameter do metódy.

Na zodpovedanie otázky musíme analyzovať dva prípady. Predstavujú dva typy údajov, ktoré môžeme odovzdať metóde: primitív a objekt.

Keď odovzdáme primitívy metóde, jej hodnota sa skopíruje do novej premennej. Pokiaľ ide o objekty, hodnota referencie sa skopíruje do novej premennej. Môžeme teda povedať, že Java je striktne pass-by-value Jazyk.

Viac sa o tom môžeme dozvedieť v jednom z našich článkov: Pass-By-Value ako mechanizmus odovzdávania parametrov v Jave.

Q2. Aký je rozdiel medzi dovozom a statickým dovozom?

Pravidelný import môžeme použiť na import konkrétnej triedy alebo všetkých tried definovaných v inom balíku:

import java.util.ArrayList; // import konkrétnej triedy java.util. *; // všetky triedy v balíku util

Môžeme ich tiež použiť na import verejných vnorených tried uzatvárajúcej triedy:

import com.baeldung.A. *

Mali by sme si však uvedomiť, že import vyššie neimportuje triedu A sám.

Existujú aj statické importy, ktoré nám umožňujú importovať statické členy alebo vnorené triedy:

import statickej java.util.Collections.EMPTY_LIST;

Účinkom je, že môžeme použiť statickú premennú EMPTY_LIST bez doplnenia názvu úplnej triedy, tj. Akoby bola deklarovaná v aktuálnej triede.

Q3. Ktoré modifikátory prístupu sú k dispozícii v prostredí Java a aký je ich účel?

V systéme sú štyri modifikátory prístupu Java:

  1. súkromné
  2. predvolené (balíček)
  3. chránené
  4. verejné

The súkromné modifikátor zaisťuje, že členovia triedy nebudú prístupní mimo triedy. Môže sa použiť na metódy, vlastnosti, konštruktory, vnorené triedy, ale nie na samotné triedy najvyššej úrovne.

Na rozdiel od súkromné modifikátor, môžeme použiť predvolené modifikátor pre všetky typy členov triedy a pre samotnú triedu. Môžeme sa prihlásiť predvolené viditeľnosť nepridaním vôbec žiadneho modifikátora prístupu. Ak použijeme predvolené viditeľnosť našej triedy alebo jej členov bude prístupná iba vo vnútri balíka našej triedy. Mali by sme mať na pamäti, že predvolený modifikátor prístupu nemá nič spoločné s predvolené kľúčové slovo.

Podobne ako predvolené modifikátor, majú prístup všetky triedy v rámci jedného balíka chránené členov. A čo viac, chránené modifikátor umožňuje podtriedam prístup k chráneným členom nadtriedy, aj keď nie sú v rovnakom balíku. Tento modifikátor prístupu nemôžeme použiť na triedy, iba na členov triedy.

The verejné modifikátor možno použiť spolu s kľúčovým slovom triedy a so všetkými členmi triedy. Sprístupňuje triedy a členov triedy vo všetkých balíkoch a vo všetkých triedach.

Viac sa dozvieme v článku Modifikátory prístupu Java.

Q4. Ktoré ďalšie modifikátory sú dostupné v prostredí Java a aký je ich účel?

V jazyku Java je k dispozícii päť ďalších modifikátorov:

  • statický
  • konečné
  • abstraktné
  • synchronizované
  • prchavý

Tieto nekontrolujú viditeľnosť.

Najskôr môžeme použiť statický kľúčové slovo do polí a metód. Statické polia alebo metódy sú členmi triedy, zatiaľ čo nestatické sú členmi objektu. Členovia triedy nepotrebujú vyvolanie žiadnej inštancie. Nazývajú sa menom triedy namiesto referenčného názvu objektu. Tento článok sa podrobnejšie venuje statický kľúčové slovo.

Potom máme konečné kľúčové slovo. Môžeme ho použiť s poľami, metódami a triedami. Kedy konečné sa používa na poli, znamená to, že odkaz na pole nemožno zmeniť. Nedá sa teda priradiť k inému objektu. Kedy konečné je aplikovaný na triedu alebo metódu, ubezpečuje nás, že túto triedu alebo metódu nemožno rozšíriť alebo prepísať. The konečné kľúčové slovo je podrobnejšie vysvetlené v tomto článku.

Nasledujúce kľúčové slovo je abstraktné. Tento môže popísať triedy a metódy. Keď sú hodiny abstraktné, nemožno ich vytvoriť inštanciou. Namiesto toho sú určené na zaradenie do podtriedy. Keď sú metódy abstraktné, sú ponechané bez implementácie a je možné ich prepísať v podtriedach.

The synchronizované kľúčové slovo môže byť najpokročilejšie. Môžeme ho použiť s inštanciou, ako aj so statickými metódami a blokmi kódu. Keď použijeme toto kľúčové slovo, zaistíme, aby Java zabezpečila synchronizáciu s daným fragmentom kódu pomocou zámku monitora. Viac informácií o synchronizované nájdete v tomto článku.

Posledné kľúčové slovo, o ktorom budeme diskutovať, je prchavý. Môžeme ho použiť iba spolu s inštančnými poľami. Deklaruje, že hodnota poľa sa musí čítať a zapisovať do hlavnej pamäte - obíde sa vyrovnávacia pamäť procesora. Všetky čítania a zápisy prchavých premenných sú atómové. Prchavé kľúčové slovo je podrobne vysvetlené v tomto článku.

Q5. Aký je rozdiel medzi JDK, JRE a JVM?

JDK znamenať Java Development Kit, čo je sada nástrojov potrebných pre vývojárov na písanie aplikácií v jazyku Java. Existujú tri typy prostredí JDK:

  • Standard Edition - vývojová súprava na vytváranie prenosných desktopových alebo serverových aplikácií
  • Enterprise Edition - rozšírenie štandardnej verzie s podporou distribuovaných výpočtových alebo webových služieb
  • Micro Edition - vývojová platforma pre zabudované a mobilné aplikácie

V JDK je veľa nástrojov, ktoré pomoc programátorom s písaním, ladením alebo údržbou aplikácií. Najpopulárnejšie sú kompilátor (javac), interpret (java), archivátor (jar) a generátor dokumentácie (javadoc).

JRE je a Java Runtime Environment. Je to súčasť JDK, ale obsahuje minimálnu funkčnosť pre spustenie aplikácií Java. Skladá sa z a Virtuálny stroj Java, základné triedy a podporné súbory. Napríklad nemá žiadny prekladač.

JVM je skratka pre Virtuálny stroj Java, čo je virtuálny stroj schopný spúšťať programy kompilované do bytecode. Je to popísané v špecifikácii JVM, pretože je dôležité zabezpečiť interoperabilitu medzi rôznymi implementáciami. Najdôležitejšou funkciou JVM je umožniť používateľom nasadiť rovnakú aplikáciu Java do rôznych operačných systémov a prostredí bez obáv z toho, čo leží pod nimi..

Ďalšie informácie sa dozviete v článku Rozdiel medzi JVM, JRE a JDK.

Q6. Aký je rozdiel medzi hromadou a hromadou?

Existujú dve časti pamäte, kde všetky premenné a objekty ukladá JVM. Prvý je stoh a druhý je halda.

The stoh je miesto, kde JVM rezervuje bloky pre miestne premenné a ďalšie údaje. Stoh je a LIFO (last in first out) štruktúra. To znamená, že kedykoľvek sa volá metóda, nový blok je vyhradený pre lokálne premenné a odkazy na objekty. Každé nové vyvolanie metódy rezervuje ďalší blok. Keď metódy dokončia svoje vykonávanie, bloky sa uvoľnia opačným spôsobom, ako boli spustené.

Každé nové vlákno má svoj vlastný zásobník.

Mali by sme si uvedomiť, že zásobník má oveľa menej pamäťového priestoru ako halda. A keď je zásobník plný, JVM hodí a StackOverflowError. Je pravdepodobné, že nastane, keď dôjde k zlému rekurzívnemu volaniu a rekurzia bude príliš hlboká.

Každý nový objekt je vytvorený v prostredí Java heap ktorý sa používa na dynamické prideľovanie. Existuje gzberač odpadu ktorý je zodpovedný za vymazanie nepoužívaných predmetov, ktoré sú rozdelené na mladé (škôlka) a staré priestory. Prístup do pamäte k halde je pomalší ako prístup k zásobníku. JVM hádže OutOfMemoryError keď je kopa plná.

Viac podrobností nájdeme v článku Stack Memory and Heap Space in Java.

Q7. Aký je rozdiel medzi Porovnateľné a Komparátor Rozhrania?

Niekedy, keď píšeme novú triedu, chceli by sme mať možnosť porovnávať objekty tejto triedy. Je to obzvlášť užitočné, keď chceme používať triedené zbierky. Existujú dva spôsoby, ako to urobiť: pomocou Porovnateľné rozhranie alebo s Komparátor rozhranie.

Najprv sa pozrime na Porovnateľné rozhranie:

verejné rozhranie Comparable {int compareTo (T var1); }

Toto rozhranie by sme mali implementovať do triedy, ktorej objekty chceme triediť.

Má to porovnať s() metóda a vráti celé číslo. Môže vrátiť tri hodnoty: -1, 0 a 1, čo znamená, že tento objekt je menší ako, rovný alebo väčší ako porovnávaný objekt.

Stojí za zmienku, že prepísané porovnajT0 () metóda by mala byť v súlade s rovná sa () metóda.

Na druhej strane môžeme použiť Komparátor rozhranie. Môže byť odovzdaný sort () metódy Zbierka rozhranie alebo pri vytváraní inštancií triedených zbierok. Preto sa väčšinou používa na vytvorenie jednorazovej stratégie triedenia.

A čo viac, je to tiež užitočné, keď používame triedu tretej strany, ktorá neimplementuje porovnateľné rozhranie.

Ako porovnať s() metóda je prepísaná porovnať () metódy by mali byť v súlade s rovná sa () môžu voliteľne umožniť porovnanie s nulovými hodnotami.

Navštívte článok Porovnávač a porovnateľný v Jave, kde nájdete ďalšie informácie.

Q8. Čo je neplatný Typ a kedy ho použijeme?

Zakaždým, keď napíšeme metódu v Jave, musí mať návratový typ. Ak chceme, aby metóda nevracala žiadnu hodnotu, môžeme použiť neplatný kľúčové slovo.

Mali by sme tiež vedieť, že existuje Neplatný trieda. Je to trieda zástupných symbolov, ktorú je možné použiť napríklad pri práci s generikami. The Neplatný triedy nemožno ani inštancovať, ani rozšíriť.

Q9. Aké sú metódy triedy objektov a čo robia?

Je dôležité vedieť, aké metódy Objekt trieda obsahuje a ako fungujú. Je tiež veľmi užitočné, keď chceme prepísať tieto metódy:

  • klon () - vráti kópiu tohto objektu
  • rovná sa () - vracia sa pravda keď sa tento objekt rovná objektu odovzdanému ako parameter
  • dokončiť () - smetiar volá túto metódu, keď čistí pamäť
  • getClass () - vráti runtime triedu tohto objektu
  • hashCode () - vráti hash kód tohto objektu. Mali by sme si byť vedomí, že by to malo byť v súlade s rovná sa () metóda
  • upozorniť () - odošle upozornenie na jedno vlákno čakajúce na monitor objektu
  • notifyAll () - odošle upozornenie na všetky vlákna čakajúce na monitor objektu
  • natiahnuť() - vráti reťazcovú reprezentáciu tohto objektu
  • počkaj () - existujú tri preťažené verzie tejto metódy. Prinúti súčasné vlákno čakať zadaný čas, kým zavolá iné vlákno upozorniť () alebo notifyAll () na tomto objekte.

Q10. Čo je to Enum a ako ho môžeme použiť?

Enum je typ triedy, ktorý umožňuje vývojárom určiť množinu preddefinovaných konštantných hodnôt. Na vytvorenie takejto triedy musíme použiť enum kľúčové slovo. Poďme si predstaviť enum dní v týždni:

verejné enum - deň {NEDEĽA, PONDELOK, UTOROK, STREDA, ŠTVRTOK, PIATOK, SOBOTA}

Na iteráciu všetkých konštánt môžeme použiť statický hodnoty () metóda. Enums nám navyše umožňuje definovať členov, ako sú vlastnosti a metódy, ako sú bežné triedy.

Aj keď je to špeciálny typ triedy, nemôžeme ju podtriediť. Výčet však môže implementovať rozhranie.

Ďalšou zaujímavou výhodou Enums je, že sú bezpečné pre vlákna, a preto sa populárne používajú ako singletony.

Viac informácií o Enums nájdete v jednom z našich sprievodcov.

Q11. Čo je a JAR?

JAR je skratka pre Archív Java. Je to archívny súbor zabalený vo formáte ZIP. Môžeme ho použiť na zahrnutie súborov triedy a pomocných zdrojov, ktoré sú potrebné pre aplikácie. Má veľa funkcií:

  • Zabezpečenie - môžeme digitálne podpísať súbory JAR
  • Kompresia - pri použití súboru JAR môžeme súbory komprimovať a zabezpečiť tak efektívne ukladanie
  • Prenosnosť - môžeme použiť ten istý súbor JAR na viacerých platformách
  • Verziovanie - Súbory JAR môžu obsahovať metadáta o súboroch, ktoré obsahujú
  • Tesnenie - môžeme zalepiť balíček v súbore JAR. To znamená, že všetky triedy z jedného balíka musia byť zahrnuté v rovnakom súbore JAR
  • Prípony - môžeme použiť formát súboru JAR na zabalenie modulov alebo rozšírení pre existujúci softvér

Q12. Čo je aNullPointerException?

The NullPointerException je pravdepodobne najbežnejšou výnimkou vo svete Java. Je to nekontrolovaná výnimka, a tým sa rozširuje RuntimeException. Nemali by sme sa to snažiť zvládnuť.

Táto výnimka sa vyvolá, keď sa pokúsime získať prístup k premennej alebo zavoláme metódu nulového odkazu, napríklad keď:

  • vyvolanie metódy nulového odkazu
  • nastavenie alebo získanie poľa nulovej referencie
  • kontrola dĺžky referencie nulového poľa
  • nastavenie alebo získanie položky odkazu na nulové pole
  • hádzanie nulový

Q13. Čo sú dva typy castingu v Jave? Ktorú výnimku je možné prihodiť? Ako sa tomu môžeme vyhnúť?

V Jave môžeme rozlišovať dva typy castingu. Môžeme urobiť upcasting, ktorý vrhá objekt na supertyp, alebo downcasting, ktorý vrhá objekt na podtyp.

Upcasting je veľmi jednoduchá, pretože to vždy dokážeme. Môžeme napríklad vyvrhnúť a String inštancia do Objekt typ:

Objekt str = "reťazec";

Prípadne môžeme skleslý premenná. Nie je to také bezpečné ako upcasting, pretože to vyžaduje kontrolu typu. Ak nesprávne odhodíme predmet, JVM hodí a ClassCastExcpetion za behu. Našťastie môžeme použiť inštancia kľúčové slovo, aby sa zabránilo neplatnému prenášaniu:

Objekt o = "reťazec"; Reťazec str = (Reťazec) o; // je to v poriadku Objekt o2 = new Object (); Reťazec str2 = (Reťazec) o2; // ClassCastException bude vyvolaná if (o2 instanceof String) {// vráti false String str3 = (String) o2; }

V tomto článku sa môžeme dozvedieť viac o castingu.

3. Otázky týkajúce sa jazyka Core-Java pre pokročilých programátorov

Q1. Prečo je reťazec nemenná trieda?

Mali by sme to vedieť String s objektmi zaobchádza inak ako s inými objektmi JVM. Jeden rozdiel je v tom String predmety sú nemenné. Znamená to, že ich už nemôžeme zmeniť, akonáhle ich vytvoríme. Existuje niekoľko dôvodov, prečo sa správajú takto:

  1. Sú uložené v bazén strún ktorá je zvláštnou súčasťou haldy pamäte. Je zodpovedný za úsporu veľkého priestoru.
  2. Nemennosť String trieda zaručuje, že sa jeho hash kód nezmení. Z tohto dôvodu Struny môžu byť efektívne použité ako kľúče v hašovacích kolekciách. Môžeme si byť istí, že z dôvodu zmeny hash kódov neprepíšeme žiadne údaje.
  3. Môžu byť bezpečne použité vo viacerých vláknach. Žiadne vlákno nemôže zmeniť hodnotu a String objekt, takže získame bezpečnosť vlákna zadarmo.
  4. Reťazce sú nemenné, aby sa zabránilo vážnym bezpečnostným problémom. Citlivé údaje, ako napríklad heslá, môže zmeniť nespoľahlivý zdroj alebo iné vlákno.

Viac o nemennosti reťazcov sa môžeme dozvedieť v tomto článku.

Q2. Aký je rozdiel medzi dynamickým viazaním a statickým viazaním?

Viazanie v Jave je proces priradenia volania metódy k správnemu telu metódy. V Jave môžeme rozlišovať dva typy väzieb: statické a dynamické.

Hlavný rozdiel medzi statickou väzbou a dynamickou väzbou je v tom, že statická väzba sa vyskytuje v čase kompilácie a dynamická väzba za behu.

Statické viazanie používa na viazanie informácie o triede. Zodpovedá za vyriešenie členov triedy, ktorí sú súkromné alebo statický a konečné metódy a premenné. Statická väzba tiež viaže preťažené metódy.

Dynamická väzba, na druhej strane používa informácie o objekte na riešenie väzieb. Preto je zodpovedný za riešenie virtuálnych a prepísaných metód.

Q3. Čo je to JIT?

JIT znamená „just in time“. Je to súčasť JRE, ktorá beží za behu a zvyšuje výkon aplikácie. Konkrétne ide o kompilátor, ktorý beží hneď po štarte programu.

To sa líši od bežného kompilátora Java, ktorý kompiluje kód dlho pred spustením aplikácie. JIT môže aplikáciu urýchliť rôznymi spôsobmi.

Napríklad kompilátor JIT je zodpovedný za kompiláciu bytecode do natívnych pokynov za behu na zlepšenie výkonu. Môže tiež optimalizovať kód na cieľový procesor a operačný systém.

Ďalej má prístup k mnohým štatistikám za behu, ktoré možno použiť na prekompilovanie pre optimálny výkon. Vďaka tomu môže tiež vykonať niektoré globálne optimalizácie kódu alebo zmeniť usporiadanie kódu pre lepšie využitie medzipamäte.

Q4. Čo je to odraz v Jave?

Reflexia je v Jave veľmi silný mechanizmus. Reflexia je mechanizmus jazyka Java, ktorý umožňuje programátorom skúmať alebo upravovať vnútorný stav programu (vlastnosti, metódy, triedy atď.) Za behu programu. Balík java.lang.reflect poskytuje všetky požadované komponenty na použitie odrazu.

Pri použití tejto funkcie môžeme získať prístup ku všetkým možným poliam, metódam, konštruktorom, ktoré sú zahrnuté v definícii triedy. Máme k nim prístup bez ohľadu na ich modifikátor prístupu. Znamená to, že napríklad máme prístup k súkromným členom. Aby sme to mohli urobiť, nemusíme poznať ich mená. Všetko, čo musíme urobiť, je použiť niektoré statické metódy Trieda.

Je potrebné vedieť, že existuje možnosť obmedziť prístup odrazom. K tomu môžeme použiť správcu zabezpečenia Java a súbor bezpečnostných zásad Java. Umožňujú nám udeľovať povolenia triedam.

Pri práci s modulmi od verzie Java 9 by sme mali vedieť, že štandardne nie sme schopní používať reflexiu na triedy importované z iného modulu. Aby sme umožnili iným triedam používať reflexiu na prístup k súkromným členom balíka, musíme udeliť povolenie „Reflection“.

Tento článok sa podrobnejšie venuje problematike Java Reflection.

Q5. Čo je a Classloader?

The triedny nakladač je jednou z najdôležitejších súčastí v Jave. Je to súčasť JRE.

Jednoducho povedané triedny nakladač je zodpovedný za načítanie tried do JVM. Môžeme rozlíšiť tri typy nakladačov triedy:

  • Zavádzač triedy Bootstrap - načítava základné triedy Java. Nachádzajú sa v / jre / lib adresár
  • Rozšírenie classloader - načíta triedy nachádzajúce sa v / jre / lib / ext alebo na ceste definovanej pomocou java.ext.dirs nehnuteľnosť
  • System Classloader - načíta triedy na triednej ceste našej aplikácie

Classloader načíta triedy „na požiadanie“. To znamená, že triedy sa načítajú po tom, ako ich program zavolá. Classloader môže navyše načítať triedu s krstným menom iba raz. Ak je však rovnaká trieda načítaná dvoma rôznymi zavádzačmi tried, potom tieto triedy zlyhajú pri kontrole rovnosti.

Viac informácií o zavádzačoch tried sa nachádza v článku Class Loaders in Java.

Q6. Aký je rozdiel medzi statickým a dynamickým načítaním triedy?

K statickému načítaniu tried dochádza, keď máme k dispozícii zdrojové triedy v čase kompilácie. Môžeme to využiť vytvorením inštancií objektov pomocou Nový kľúčové slovo.

Dynamické načítanie triedy sa týka situácie, keď nemôžeme poskytnúť definíciu triedy v čase kompilácie. To však môžeme urobiť za behu. Na vytvorenie inštancie triedy musíme použiť Class.forName () metóda:

Class.forName ("oracle.jdbc.driver.OracleDriver") 

Q7. Aký je účel dohody Serializovateľné Rozhranie?

Môžeme použiť Serializovateľné rozhranie umožňujúce serializáciu triedy, využívajúce rozhranie Java Serialization API. Serializácia je mechanizmus na ukladanie stavu objektu ako postupnosti bajtov, zatiaľ čo deserializácia je mechanizmus na obnovenie stavu objektu zo sledu bajtov. Serializovaný výstup obsahuje stav objektu a niektoré metadáta o type objektu a typoch jeho polí.

Mali by sme vedieť, že podtypy serializovateľných tried sú tiež serializovateľné. Ak však chceme, aby bola trieda serializovateľná, ale jej supertyp je neserializovateľný, musíme urobiť dve veci:

  • implementovať Serializovateľné rozhranie
  • zaistiť, aby v nadtriede nebol žiadny konštruktor argumentov

Viac o serializácii sa môžeme dočítať v jednom z našich článkov.

Q8. Existuje v Jave destruktor?

V Jave garbage collector automaticky vymaže nepoužité objekty, aby uvoľnil pamäť. Vývojári nemusia označovať objekty na odstránenie, čo je náchylné na chyby. Je teda rozumné, že Java nemá k dispozícii žiadne deštruktory.

V prípade, že objekty obsahujú otvorené zásuvky, otvorené súbory alebo databázové pripojenia, smetiar nie je schopný tieto prostriedky získať späť. Zdroje môžeme uvoľniť v Zavrieť metóda a použitie skús-konečne syntax na následné volanie metódy pred jazykom Java 7, ako sú napríklad I / O triedy FileInputStreama FileOutputStream. Od verzie Java 7 môžeme implementovať rozhranie Automatické uzatváranie a použitie vyskúšajte zdroje vyhlásenie na napísanie kratšieho a čistejšieho kódu. Ale je možné, že používatelia API zabudnú zavolať Zavrieť metóda, takže dokončiť metóda a Čistič triedy, aby fungovala ako bezpečnostná sieť. Upozorňujeme však, že nie sú rovnocenné s ničiteľom.

Nie je to isté dokončiť metóda a Čistič trieda pobeží pohotovo. Pred výstupom z JVM dokonca nemajú šancu kandidovať. Aj keď sme sa mohli dovolať System.runFinalizácia navrhnúť, aby JVM spustilo dokončiť metódy akýchkoľvek objektov čakajúcich na dokončenie, sú stále nedeterministické.

Okrem toho dokončiť metóda môže spôsobiť problémy s výkonom, zablokovanie atď. Viac informácií nájdete v jednom z našich článkov: Sprievodca finalizáciou metódy v jazyku Java.

Od verzie Java 9, Čistič sa pridáva trieda, ktorá nahradzuje dokončiť metóda kvôli mínusom, ktoré má. Vďaka tomu máme lepšiu kontrolu nad niťou, ktorá vykonáva čistiace akcie.

Ale špecifikácia Java poukazuje na správanie čističov počas System.exit je implementácia špecifická a Java neposkytuje žiadne záruky, či budú akcie čistenia vyvolané alebo nie.


$config[zx-auto] not found$config[zx-overlay] not found