logo

Výstup programu Java | Sada 9

Úroveň obtížnosti : Střední

Předpovězte výstup následujících programů 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

Vysvětlení:

Víme, že statické proměnné jsou volány, když se třída načítá a statické proměnné jsou volány pouze jednou. Nyní řádek 13 vede k vytvoření objektu, který zase volá konstruktor a 'Geeksforgeeks' se vytiskne podruhé. Pokud by na řádku 8 nebyla použita statická proměnná, objekt by byl volán rekurzivně nekonečně, což by vedlo k chybě StackOverFlow.

strojové učení pod dohledem

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

Vysvětlení:

Statický blok se provede, když je třída načtena do paměti. Třída může mít více statických bloků, které se provádějí ve stejném pořadí, v jakém byly zapsány do programu.

Poznámka : Statické metody mohou přistupovat k proměnným třídy bez použití objektu třídy. Vzhledem k tomu, že konstruktor je volán při vytváření nové instance, jsou nejprve volány statické bloky a poté je volán konstruktor. Pokud bychom spustili stejný program bez použití objektu, konstruktor by nebyl volán.  

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:

java architektura
Compilation fails. 

Vysvětlení:

Metoda calc() ve třídě superClass je konečná a nelze ji tedy přepsat.  

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

Vysvětlení:

Ve zdrojovém kódu objektu Integer najdeme metodu 'valueOf', ve které můžeme vidět, že rozsah objektu Integer leží od IntegerCache.low(-128) do IntegerCache.high(127). Proto čísla nad 127 neposkytnou očekávaný výstup. Rozsah IntegerCache lze vypozorovat ze zdrojového kódu třídy IntegerCache.