Stopnja težavnosti : Srednje
Predvidi izhod naslednjih 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(); } }
Izhod:
Geeksforgeeks
Geeksforgeeks
Pojasnilo:
Vemo, da se statične spremenljivke kličejo, ko se razred naloži, statične spremenljivke pa se kličejo samo enkrat. Zdaj se v 13. vrstici ustvari objekt, ki nato pokliče konstruktor in 'Geeksforgeeks' se natisne drugič. Če v vrstici 8 ne bi bila uporabljena statična spremenljivka, bi bil objekt poklican rekurzivno neskončno, kar bi povzročilo napako StackOverFlow.
nadzorovano strojno učenje
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); } }
Izhod:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Pojasnilo:
Statični blok se izvede, ko je razred naložen v pomnilnik. Razred ima lahko več statičnih blokov, ki se izvajajo v istem zaporedju, v katerem so bili zapisani v program.
Opomba : statične metode lahko dostopajo do spremenljivk razreda brez uporabe predmeta razreda. Ker se konstruktor pokliče, ko se ustvari nov primerek, se najprej pokličejo statični bloki, nato pa se pokliče konstruktor. Če bi zagnali isti program brez uporabe objekta, konstruktor ne bi bil poklican.
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)); } }
Izhod:
Compilation fails. Pojasnilo:
Metoda calc() v razredu superClass je končna in je zato ni mogoče preglasiti.
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); } }
Izhod:
false
true
Pojasnilo:
V izvorni kodi objekta Integer bomo našli metodo 'valueOf', v kateri lahko vidimo, da obseg objekta Integer leži od IntegerCache.low(-128) do IntegerCache.high(127). Zato številke nad 127 ne bodo dale pričakovanega učinka. Razpon IntegerCache je mogoče opazovati iz izvorne kode razreda IntegerCache.
alternativa xampp