logo

A Java program kimenete | 9. készlet

Nehézségi szint : Közepes

Megjósolja a következő Java programok kimenetét:

1. program:

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

Kimenet:



Geeksforgeeks  
Geeksforgeeks

Magyarázat:

Tudjuk, hogy statikus változókat akkor hívunk meg, amikor egy osztály betöltődik, a statikus változókat pedig csak egyszer hívjuk meg. Most a 13. sor eredménye az objektum létrehozásának, amely inturn meghívja a konstruktort, és a „Geeksforgeeks” másodszor kerül kinyomtatásra. Ha a 8. sorban a statikus változót nem használták volna, az objektumot rekurzívan végtelenül hívták volna, ami StackOverFlow hibához vezetett volna.

git status -s

2. program:

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

Kimenet:

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

Magyarázat:

A statikus blokk akkor kerül végrehajtásra, amikor az osztály betöltődik a memóriába. Egy osztálynak több statikus blokkja lehet, amelyek ugyanabban a sorrendben kerülnek végrehajtásra, mint ahogyan a programba írták őket.

Jegyzet : A statikus metódusok hozzáférhetnek az osztályváltozókhoz az osztály objektumának használata nélkül. Mivel a konstruktort egy új példány létrehozásakor hívják meg, így először a statikus blokkokat hívják meg, majd ezt követően hívják meg a konstruktort. Ha ugyanazt a programot objektum használata nélkül futtattuk volna, a konstruktor nem lett volna meghívva.  

3. program:

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

Kimenet:

Compilation fails. 

Magyarázat:

A calc() metódus a superClass osztályban végleges, ezért nem bírálható felül.  

4. program:

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

Kimenet:

false  
true

Magyarázat:

Az Integer objektum forráskódjában találunk egy 'valueOf' metódust, amelyben láthatjuk, hogy az Integer objektum tartománya IntegerCache.low(-128) és IntegerCache.high(127) között van. Ezért a 127 feletti számok nem adják a várt eredményt. Az IntegerCache tartománya az IntegerCache osztály forráskódjából figyelhető meg.

mennyi a 25 a 100-ból