logo

Ausgabe des Java-Programms | Satz 9

Schwierigkeitsgrad : Dazwischenliegend

Sagen Sie die Ausgabe der folgenden Java-Programme voraus:

Programm 1:

Java
class 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:

Java
class 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:

Java
class 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:

Java
public 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.