Nehézségi szint : Közepes
Megjósolja a következő Java programok kimenetét:
1. program:
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(); } }
Kimenet:
Geeksforgeeks
Geeksforgeeks
Magyarázat:
Tudjuk, hogy statikus változókat akkor hívunk meg, amikor egy osztály betöltődik, a statikus változókat pedig csak egyszer hívjuk meg. Most a 13. sor eredménye az objektum létrehozásának, amely inturn meghívja a konstruktort, és a „Geeksforgeeks” másodszor kerül kinyomtatásra. Ha a 8. sorban a statikus változót nem használták volna, az objektumot rekurzívan végtelenül hívták volna, ami StackOverFlow hibához vezetett volna.
git status -s
2. program:
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); } }
Kimenet:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Magyarázat:
A statikus blokk akkor kerül végrehajtásra, amikor az osztály betöltődik a memóriába. Egy osztálynak több statikus blokkja lehet, amelyek ugyanabban a sorrendben kerülnek végrehajtásra, mint ahogyan a programba írták őket.
Jegyzet : A statikus metódusok hozzáférhetnek az osztályváltozókhoz az osztály objektumának használata nélkül. Mivel a konstruktort egy új példány létrehozásakor hívják meg, így először a statikus blokkokat hívják meg, majd ezt követően hívják meg a konstruktort. Ha ugyanazt a programot objektum használata nélkül futtattuk volna, a konstruktor nem lett volna meghívva.
3. program:
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)); } }
Kimenet:
Compilation fails. Magyarázat:
A calc() metódus a superClass osztályban végleges, ezért nem bírálható felül.
4. program:
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); } }
Kimenet:
false
true
Magyarázat:
Az Integer objektum forráskódjában találunk egy 'valueOf' metódust, amelyben láthatjuk, hogy az Integer objektum tartománya IntegerCache.low(-128) és IntegerCache.high(127) között van. Ezért a 127 feletti számok nem adják a várt eredményt. Az IntegerCache tartománya az IntegerCache osztály forráskódjából figyelhető meg.
mennyi a 25 a 100-ból