logo

Output del programma Java | Insieme 9

Livello di difficoltà : Intermedio

Prevedere l'output dei seguenti programmi Java:

Programma 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();  } } 

Produzione:



Geeksforgeeks  
Geeksforgeeks

Spiegazione:

Sappiamo che le variabili statiche vengono chiamate quando una classe viene caricata e le variabili statiche vengono chiamate solo una volta. Ora la riga 13 risulta nella creazione di un oggetto che a sua volta chiama il costruttore e "Geeksforgeeks" viene stampato la seconda volta. Se nella riga 8 la variabile statica non fosse stata utilizzata, l'oggetto sarebbe stato chiamato ricorsivamente all'infinito portando all'errore StackOverFlow.

.04 come frazione

Programma 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);  } } 

Produzione:

Static Block 1  
Static Block 2
Value of num = 100
Value of mystr = Constructor

Spiegazione:

Il blocco statico viene eseguito quando la classe viene caricata in memoria. Una classe può avere più blocchi statici che vengono eseguiti nella stessa sequenza in cui sono stati scritti nel programma.

Nota : I metodi statici possono accedere alle variabili della classe senza utilizzare l'oggetto della classe. Poiché il costruttore viene chiamato quando viene creata una nuova istanza, prima vengono chiamati i blocchi statici e successivamente viene chiamato il costruttore. Se avessimo eseguito lo stesso programma senza utilizzare object il costruttore non sarebbe stato chiamato.  

Programma 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));  } } 

Produzione:

Compilation fails. 

Spiegazione:

Il metodo calc() nella classe superClass è definitivo e quindi non può essere sovrascritto.  

css sottolinea il testo

Programma 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);  } } 

Produzione:

false  
true

Spiegazione:

Nel codice sorgente dell'oggetto Integer troveremo un metodo 'valueOf' in cui possiamo vedere che l'intervallo dell'oggetto Integer va da IntegerCache.low(-128) a IntegerCache.high(127). Pertanto i numeri superiori a 127 non daranno il risultato atteso. L'intervallo di IntegerCache può essere osservato dal codice sorgente della classe IntegerCache.