Úroveň obtiažnosti : Stredne pokročilý
Predpovedajte výstup nasledujúcich programov Java:
Program 1:
Javaclass Gfg { // constructor Gfg() { System.out.println('Geeksforgeeks'); } static Gfg a = new Gfg(); //line 8 public static void main(String args[]) { Gfg b; //line 12 b = new Gfg(); } }
výstup:
Geeksforgeeks
Geeksforgeeks
Vysvetlenie:
Vieme, že statické premenné sa volajú pri načítaní triedy a statické premenné sa volajú iba raz. Teraz riadok 13 vedie k vytvoreniu objektu, ktorý zavolá konštruktor a 'Geeksforgeeks' sa vytlačí druhýkrát. Ak by sa v riadku 8 nepoužila statická premenná, objekt by sa volal rekurzívne donekonečna, čo by viedlo k chybe StackOverFlow.
stiahnite si videá z youtube na vlc
Program 2:
Javaclass Gfg { static int num; static String mystr; // constructor Gfg() { num = 100; mystr = 'Constructor'; } // First Static block static { System.out.println('Static Block 1'); num = 68; mystr = 'Block1'; } // Second static block static { System.out.println('Static Block 2'); num = 98; mystr = 'Block2'; } public static void main(String args[]) { Gfg a = new Gfg(); System.out.println('Value of num = ' + a.num); System.out.println('Value of mystr = ' + a.mystr); } }
výstup:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Vysvetlenie:
Statický blok sa vykoná, keď sa trieda načíta do pamäte. Trieda môže mať viacero statických blokov, ktoré sa vykonávajú v rovnakom poradí, v akom boli zapísané do programu.
Poznámka : Statické metódy môžu pristupovať k premenným triedy bez použitia objektu triedy. Keďže pri vytváraní novej inštancie sa volá konštruktor, najprv sa volajú statické bloky a potom sa volá konštruktor. Ak by sme ten istý program spustili bez použitia objektu, konštruktor by sa nezavolal.
Program 3:
Javaclass superClass { final public int calc(int a int b) { return 0; } } class subClass extends superClass { public int calc(int a int b) { return 1; } } public class Gfg { public static void main(String args[]) { subClass get = new subClass(); System.out.println('x = ' + get.calc(0 1)); } }
výstup:
Compilation fails. Vysvetlenie:
Metóda calc() v triede superClass je konečná, a preto ju nemožno prepísať.
Program 4:
Javapublic class Gfg { public static void main(String[] args) { Integer a = 128 b = 128; System.out.println(a == b); Integer c = 100 d = 100; System.out.println(c == d); } }
výstup:
false
true
Vysvetlenie:
V zdrojovom kóde objektu Integer nájdeme metódu 'valueOf', v ktorej môžeme vidieť, že rozsah objektu Integer leží od IntegerCache.low(-128) do IntegerCache.high(127). Preto čísla nad 127 neposkytnú očakávaný výstup. Rozsah IntegerCache je možné pozorovať zo zdrojového kódu triedy IntegerCache.
hlavný program v jave