Razina težine : Srednji
Predvidite izlaz sljedećih Java programa:
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(); } }
Izlaz:
Geeksforgeeks
Geeksforgeeks
Obrazloženje:
Znamo da se statičke varijable pozivaju kada se klasa učita, a statičke varijable se pozivaju samo jednom. Sada linija 13 rezultira stvaranjem objekta koji zauzvrat poziva konstruktor i 'Geeksforgeeks' se ispisuje drugi put. Da se u retku 8 ne bi koristila statička varijabla, objekt bi bio pozvan rekurzivno beskonačno što bi dovelo do pogreške StackOverFlow.
koliko tipki imaju tipkovnice
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); } }
Izlaz:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Obrazloženje:
Statički blok se izvršava kada se klasa učita u memoriju. Klasa može imati više statičkih blokova koji se izvode u istom nizu u kojem su zapisani u programu.
Bilješka : Statičke metode mogu pristupiti varijablama klase bez korištenja objekta klase. Budući da se konstruktor poziva kada se kreira nova instanca, prvo se pozivaju statički blokovi, a nakon toga se poziva konstruktor. Da smo pokrenuli isti program bez korištenja objekta, konstruktor ne bi bio pozvan.
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)); } }
Izlaz:
Compilation fails. Obrazloženje:
Metoda calc() u klasi superClass je konačna i stoga se ne može nadjačati.
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); } }
Izlaz:
false
true
Obrazloženje:
np podstava
U izvornom kodu Integer objekta pronaći ćemo metodu 'valueOf' u kojoj možemo vidjeti da se raspon Integer objekta nalazi od IntegerCache.low(-128) do IntegerCache.high(127). Stoga brojevi iznad 127 neće dati očekivani učinak. Raspon IntegerCachea može se promatrati iz izvornog koda klase IntegerCache.