Vaikeustaso : Keskitaso
Ennusta seuraavien Java-ohjelmien tulos:
Ohjelma 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(); } }
Lähtö:
Geeksforgeeks
Geeksforgeeks
Selitys:
Tiedämme, että staattisia muuttujia kutsutaan, kun luokka latautuu, ja staattisia muuttujia kutsutaan vain kerran. Nyt rivi 13 tulokset objektin luomiseen, joka inturn kutsuu konstruktoria ja "Geeksforgeeks" tulostetaan toisen kerran. Jos rivillä 8 staattista muuttujaa ei olisi käytetty, objektia olisi kutsuttu rekursiivisesti äärettömästi, mikä olisi johtanut StackOverFlow-virheeseen.
täysi muoto pvr
Ohjelma 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); } }
Lähtö:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Selitys:
Staattinen lohko suoritetaan, kun luokka ladataan muistiin. Luokassa voi olla useita staattisia lohkoja, jotka suoritetaan samassa järjestyksessä kuin ne on kirjoitettu ohjelmaan.
Huom : Staattiset menetelmät voivat käyttää luokkamuuttujia käyttämättä luokan objektia. Koska konstruktoria kutsutaan kun uusi ilmentymä luodaan, niin ensin kutsutaan staattiset lohkot ja sen jälkeen kutsutaan konstruktori. Jos olisimme ajaneet saman ohjelman käyttämättä objektia, konstruktoria ei olisi kutsuttu.
Ohjelma 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)); } }
Lähtö:
Compilation fails. Selitys:
Metodi calc() luokassa superClass on lopullinen, joten sitä ei voi ohittaa.
np.histogrammi
Ohjelma 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); } }
Lähtö:
false
true
Selitys:
Integer-objektin lähdekoodista löydämme menetelmän 'valueOf', jossa näemme, että Integer-objektin alue on IntegerCache.low(-128) - IntegerCache.high(127). Siksi luvut yli 127 eivät anna odotettua tulosta. IntegerCache-alueen voidaan havaita IntegerCache-luokan lähdekoodista.