logo

Výstup programu Java | Súprava 9

Úroveň obtiažnosti : Stredne pokročilý

Predpovedajte výstup nasledujúcich programov Java:

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

výstup:



Geeksforgeeks  
Geeksforgeeks

Vysvetlenie:

Vieme, že statické premenné sa volajú pri načítaní triedy a statické premenné sa volajú iba raz. Teraz riadok 13 vedie k vytvoreniu objektu, ktorý zavolá konštruktor a 'Geeksforgeeks' sa vytlačí druhýkrát. Ak by sa v riadku 8 nepoužila statická premenná, objekt by sa volal rekurzívne donekonečna, čo by viedlo k chybe StackOverFlow.

stiahnite si videá z youtube na vlc

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

výstup:

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

Vysvetlenie:

Statický blok sa vykoná, keď sa trieda načíta do pamäte. Trieda môže mať viacero statických blokov, ktoré sa vykonávajú v rovnakom poradí, v akom boli zapísané do programu.

Poznámka : Statické metódy môžu pristupovať k premenným triedy bez použitia objektu triedy. Keďže pri vytváraní novej inštancie sa volá konštruktor, najprv sa volajú statické bloky a potom sa volá konštruktor. Ak by sme ten istý program spustili bez použitia objektu, konštruktor by sa nezavolal.  

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

výstup:

Compilation fails. 

Vysvetlenie:

Metóda calc() v triede superClass je konečná, a preto ju nemožno prepísať.  

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

výstup:

false  
true

Vysvetlenie:

V zdrojovom kóde objektu Integer nájdeme metódu 'valueOf', v ktorej môžeme vidieť, že rozsah objektu Integer leží od IntegerCache.low(-128) do IntegerCache.high(127). Preto čísla nad 127 neposkytnú očakávaný výstup. Rozsah IntegerCache je možné pozorovať zo zdrojového kódu triedy IntegerCache.

hlavný program v jave