logo

Sortie du programme Java | Ensemble 9

Niveau de difficulté : Intermédiaire

Prédisez le résultat des programmes Java suivants :

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

Sortir:



Geeksforgeeks  
Geeksforgeeks

Explication:

Nous savons que les variables statiques sont appelées lors du chargement d’une classe et que les variables statiques ne sont appelées qu’une seule fois. Maintenant, la ligne 13 aboutit à la création d'un objet qui à son tour appelle le constructeur et « Geeksforgeeks » est imprimé une deuxième fois. Si à la ligne 8 la variable statique n'avait pas été utilisée, l'objet aurait été appelé de manière récursive à l'infini, conduisant à une erreur StackOverFlow.

carte vs ensemble

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

Sortir:

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

Explication:

Le bloc statique est exécuté lorsque la classe est chargée dans la mémoire. Une classe peut avoir plusieurs blocs statiques qui sont exécutés dans la même séquence dans laquelle ils ont été écrits dans le programme.

Note : Les méthodes statiques peuvent accéder aux variables de classe sans utiliser l'objet de la classe. Étant donné que le constructeur est appelé lorsqu'une nouvelle instance est créée, les blocs statiques sont d'abord appelés, puis le constructeur est appelé. Si nous avions exécuté le même programme sans utiliser d'objet, le constructeur n'aurait pas été appelé.  

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

Sortir:

Compilation fails. 

Explication:

La méthode calc() de la classe superClass est finale et ne peut donc pas être remplacée.  

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

Sortir:

false  
true

Explication:

Dans le code source de l'objet Integer, nous trouverons une méthode 'valueOf' dans laquelle nous pouvons voir que la plage de l'objet Integer s'étend de IntegerCache.low(-128) à IntegerCache.high(127). Par conséquent, les nombres supérieurs à 127 ne donneront pas le résultat attendu. La plage d'IntegerCache peut être observée à partir du code source de la classe IntegerCache.

le meilleur sourire du monde