難易度 : 中級
次の Java プログラムの出力を予測します。
プログラム 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(); } }
出力:
Geeksforgeeks
Geeksforgeeks
説明:
静的変数はクラスのロード時に呼び出され、静的変数は 1 回だけ呼び出されることがわかっています。 13 行目ではオブジェクトが作成され、コンストラクターが呼び出され、「Geeksforgeeks」が 2 回目に出力されます。 8 行目で静的変数が使用されていない場合、オブジェクトは無限に再帰的に呼び出され、StackOverFlow エラーが発生します。
Androidで隠されたものを見つける方法
プログラム 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); } }
出力:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
説明:
静的ブロックは、クラスがメモリにロードされるときに実行されます。クラスには、プログラムに書き込まれたのと同じ順序で実行される複数の Static ブロックを含めることができます。
注記 : 静的メソッドは、クラスのオブジェクトを使用せずにクラス変数にアクセスできます。新しいインスタンスが作成されるとコンストラクターが呼び出されるため、最初に静的ブロックが呼び出され、その後コンストラクターが呼び出されます。オブジェクトを使用せずに同じプログラムを実行した場合、コンストラクターは呼び出されません。
プログラム 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)); } }
出力:
Compilation fails. 説明:
クラス superClass の calc() メソッドはfinalであるため、オーバーライドできません。
プログラム 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); } }
出力:
false
true
説明:
document.queryselector
Integer オブジェクトのソース コードにはメソッド「valueOf」があり、Integer オブジェクトの範囲が IntegerCache.low(-128) から IntegerCache.high(127) までであることがわかります。したがって、127 を超える数値では期待どおりの出力が得られません。 IntegerCache の範囲は、IntegerCache クラスのソース コードから確認できます。