Nivell de dificultat : Intermedi
Prediu la sortida dels següents programes Java:
Programa 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(); } }
Sortida:
Geeksforgeeks
Geeksforgeeks
Explicació:
Sabem que les variables estàtiques es criden quan es carrega una classe i les variables estàtiques només es criden una vegada. Ara la línia 13 dóna com a resultat la creació d'un objecte que al seu torn crida al constructor i "Geeksforgeeks" s'imprimeix per segona vegada. Si a la línia 8 no s'hagués utilitzat la variable estàtica, l'objecte s'hauria cridat de manera recursiva i infinitament provocant un error StackOverFlow.
pitó camelcase
Programa 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); } }
Sortida:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Explicació:
El bloc estàtic s'executa quan la classe es carrega a la memòria. Una classe pot tenir diversos blocs estàtics que s'executen en la mateixa seqüència en què s'han escrit al programa.
Nota : Els mètodes estàtics poden accedir a variables de classe sense utilitzar l'objecte de la classe. Com que el constructor es crida quan es crea una nova instància, primer es criden els blocs estàtics i després es crida el constructor. Si haguéssim executat el mateix programa sense utilitzar l'objecte, el constructor no s'hauria cridat.
Programa 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)); } }
Sortida:
Compilation fails. Explicació:
El mètode calc() de la classe superClass és final i, per tant, no es pot substituir.
algorisme per a bfs
Programa 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); } }
Sortida:
false
true
Explicació:
Al codi font de l'objecte Integer trobarem un mètode 'valueOf' en el qual podem veure que l'interval de l'objecte Integer es troba des d'IntegerCache.low(-128) fins a IntegerCache.high(127). Per tant, els números per sobre de 127 no donaran la sortida esperada. L'interval d'IntegerCache es pot observar des del codi font de la classe IntegerCache.