Sværhedsgrad : Mellem
Forudsige outputtet af følgende Java-programmer:
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(); } }
Produktion:
Geeksforgeeks
Geeksforgeeks
Forklaring:
Vi ved, at statiske variable kaldes, når en klasse indlæses, og statiske variable kaldes kun én gang. Nu resulterer linje 13 til oprettelse af objekt, som inturn kalder konstruktøren, og 'Geeksforgeeks' udskrives anden gang. Hvis statisk variabel i linje 8 ikke ville være blevet brugt, ville objektet være blevet kaldt rekursivt uendeligt, hvilket fører til StackOverFlow-fejl.
eksempel binært søgetræ
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); } }
Produktion:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Forklaring:
Statisk blok bliver udført, når klassen indlæses i hukommelsen. En klasse kan have flere statiske blokke, som udføres i samme rækkefølge, som de er blevet skrevet ind i programmet.
Note : Statiske metoder kan få adgang til klassevariabler uden at bruge klassens objekt. Da konstruktør kaldes, når en ny instans oprettes, så kaldes først de statiske blokke og derefter kaldes konstruktøren. Hvis vi ville have kørt det samme program uden at bruge objekt, ville konstruktøren ikke være blevet kaldt.
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)); } }
Produktion:
Compilation fails. Forklaring:
Metoden calc() i klassen superClass er endelig og kan derfor ikke tilsidesættes.
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); } }
Produktion:
false
true
Forklaring:
I kildekoden til Integer-objektet vil vi finde en metode 'valueOf', hvori vi kan se, at området for Integer-objektet ligger fra IntegerCache.low(-128) til IntegerCache.high(127). Derfor vil tallene over 127 ikke give det forventede output. Rækkevidden af IntegerCache kan observeres fra kildekoden til IntegerCache-klassen.
java print