Nivel de dificultate : Intermediar
Preziceți rezultatul următoarelor programe Java:
Programul 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(); } }
Ieșire:
Geeksforgeeks
Geeksforgeeks
Explicaţie:
Știm că variabilele statice sunt apelate atunci când se încarcă o clasă, iar variabilele statice sunt apelate o singură dată. Acum, din linia 13 rezultă crearea unui obiect care la rândul său apelează la constructor și „Geeksforgeeks” este tipărit a doua oară. Dacă în linia 8 variabila statică nu ar fi fost utilizată, obiectul ar fi fost apelat recursiv la infinit, ducând la eroarea StackOverFlow.
câte taste au tastaturile
Programul 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); } }
Ieșire:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Explicaţie:
Blocul static este executat atunci când clasa este încărcată în memorie. O clasă poate avea mai multe blocuri statice care sunt executate în aceeași secvență în care au fost scrise în program.
Nota : Metodele statice pot accesa variabilele clasei fără a utiliza obiectul clasei. Deoarece constructorul este apelat atunci când este creată o instanță nouă, în primul rând sunt apelate blocurile statice și după aceea este apelat constructorul. Dacă am fi rulat același program fără a folosi obiect, constructorul nu ar fi fost apelat.
Programul 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)); } }
Ieșire:
stratul de rețea în rețelele de calculatoare
Compilation fails. Explicaţie:
Metoda calc() din clasa superClass este finală și, prin urmare, nu poate fi suprascrisă.
Programul 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); } }
Ieșire:
false
true
Explicaţie:
În codul sursă al obiectului Integer vom găsi o metodă 'valueOf' în care putem vedea că intervalul obiectului Integer se află de la IntegerCache.low(-128) la IntegerCache.high(127). Prin urmare, numerele de peste 127 nu vor da rezultatul așteptat. Intervalul IntegerCache poate fi observat din codul sursă al clasei IntegerCache.