Niveau de difficulté : Intermédiaire
Prédisez le résultat des programmes Java suivants :
Programme 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(); } }
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 :
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); } }
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 :
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)); } }
Sortir:
Compilation fails. Explication:
La méthode calc() de la classe superClass est finale et ne peut donc pas être remplacée.
Programme 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); } }
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