Schwierigkeitsgrad : Dazwischenliegend
Sagen Sie die Ausgabe der folgenden Java-Programme voraus:
Programm 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(); } }
Ausgabe:
Geeksforgeeks
Geeksforgeeks
Erläuterung:
Wir wissen, dass statische Variablen beim Laden einer Klasse aufgerufen werden und statische Variablen nur einmal aufgerufen werden. Nun führt Zeile 13 zur Erstellung eines Objekts, das wiederum den Konstruktor aufruft und „Geeksforgeeks“ zum zweiten Mal ausgibt. Wenn in Zeile 8 keine statische Variable verwendet worden wäre, wäre das Objekt unendlich rekursiv aufgerufen worden, was zu einem StackOverFlow-Fehler geführt hätte.
zweidimensionales Array-Programm in c
Programm 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); } }
Ausgabe:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Erläuterung:
Der statische Block wird ausgeführt, wenn die Klasse in den Speicher geladen wird. Eine Klasse kann mehrere statische Blöcke haben, die in derselben Reihenfolge ausgeführt werden, in der sie in das Programm geschrieben wurden.
Notiz : Statische Methoden können auf Klassenvariablen zugreifen, ohne ein Objekt der Klasse zu verwenden. Da der Konstruktor aufgerufen wird, wenn eine neue Instanz erstellt wird, werden zunächst die statischen Blöcke und anschließend der Konstruktor aufgerufen. Wenn wir dasselbe Programm ohne die Verwendung von Objekten ausgeführt hätten, wäre der Konstruktor nicht aufgerufen worden.
Programm 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)); } }
Ausgabe:
Compilation fails. Erläuterung:
Die Methode calc() in der Klasse superClass ist endgültig und kann daher nicht überschrieben werden.
Programm 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); } }
Ausgabe:
false
true
Erläuterung:
Arithmetik-Logikeinheit
Im Quellcode des Integer-Objekts finden wir eine Methode „valueOf“, in der wir sehen können, dass der Bereich des Integer-Objekts von IntegerCache.low(-128) bis IntegerCache.high(127) liegt. Daher liefern Zahlen über 127 nicht die erwartete Ausgabe. Der Bereich von IntegerCache kann aus dem Quellcode der IntegerCache-Klasse beobachtet werden.