Java プログラムの出力 |セット 7
難易度: 中級 以下の Java プログラムの出力を予測します。 プログラム 1 : Java
public class Calculator { int num = 100 ; public void calc ( int num ) { this . num = num * 10 ; } public void printNum () { System . out . println ( num ); } public static void main ( String [] args ) { Calculator obj = new Calculator (); obj . calc ( 2 ); obj . printNum (); } }
オプション: A) 20 B) 100 C) 1000 D) 2 答え:A) 20 説明 : ここで、クラスインスタンス変数名(num)は次と同じです。 計算() メソッドのローカル変数名(num)。したがって、クラスインスタンス変数を参照するには 計算() 方法 これ というキーワードが使われています。したがって、声明では this.num = num * 10 で 値が 2 であるメソッドのローカル変数を表し、 この番号 初期値が100のクラスインスタンス変数を表します。 printNum() メソッドにはクラスインスタンス変数と同じ名前のローカル変数がないため、直接使用できます で インスタンス変数を参照しますが、 この番号 使用できます。 プログラム 2 : Java public class MyStuff { String name ; MyStuff ( String n ) { name = n ; } public static void main ( String [] args ) { MyStuff m1 = new MyStuff ( 'guitar' ); MyStuff m2 = new MyStuff ( 'tv' ); System . out . println ( m2 . equals ( m1 )); } @Override public boolean equals ( Object obj ) { MyStuff m = ( MyStuff ) obj ; if ( m . name != null ) { return true ; } return false ; } }
オプション: A) 出力は true であり、MyStuff は Object.equals() コントラクトを満たしています。 B) 出力は false で、MyStuff は Object.equals() コントラクトを満たします。 C) 出力は true ですが、MyStuff は Object.equals() コントラクトを満たしていません。 D) 出力は false であり、MyStuff は Object.equals() コントラクトを満たしていません。 答え : C) 出力は true ですが、MyStuff は Object.equals() コントラクトを満たしていません。 説明 : として 等しい(オブジェクトオブジェクト) Object クラスのメソッドは、2 つのオブジェクトを同値関係に基づいて比較します。ただし、ここではオブジェクトが null かどうかを確認しているだけなので、満たされません。 Object.equals() 契約。として m1 null ではない true が出力されます。 プログラム 3 : Java class Alpha { public String type = 'a ' ; public Alpha () { System . out . print ( 'alpha ' ); } } public class Beta extends Alpha { public Beta () { System . out . print ( 'beta ' ); } void go () { type = 'b ' ; System . out . print ( this . type + super . type ); } public static void main ( String [] args ) { new Beta (). go (); } }
オプション: A) アルファ ベータ b b B) アルファ ベータ a b C) ベータ アルファ b b D) ベータ アルファ a b 答え : A) アルファ ベータ b b 説明 : 声明 新しいベータ().go() 2 つのフェーズで実行されます。第一段階では ベータ クラスコンストラクターが呼び出されます。インスタンスメンバーが存在しません ベータ クラス。それで今 ベータ クラスコンストラクターが実行されます。として ベータ クラスが拡張する アルファ クラスなので呼び出し先は アルファ デフォルトで最初のステートメントとしてのクラス コンストラクター (コンパイラによって配置される) は 素晴らしい() で ベータ クラスコンストラクター。これで 1 つのインスタンス変数として ( タイプ ) が存在します アルファ クラスなのでメモリを取得します。 アルファ クラス コンストラクターが実行されてから return を呼び出します。 ベータ クラスコンストラクターの次のステートメント。それで アルファベータ と印刷されています。第二段階中 行く() メソッドがこのオブジェクトに対して呼び出されます。変数は 1 つだけなので ( タイプ ) 値が次のオブジェクト内の ある 。したがって、次のように変更されます b そして2回印刷しました。の スーパーキーワード ここは役に立たない。 プログラム 4 : Java public class Test { public static void main ( String [] args ) { StringBuilder s1 = new StringBuilder ( 'Java' ); String s2 = 'Love' ; s1 . append ( s2 ); s1 . substring ( 4 ); int foundAt = s1 . indexOf ( s2 ); System . out . println ( foundAt ); } }
オプション: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException 実行時にスローされます。 答え : C) 4 説明 : 追加(文字列str) メソッド str を連結します s1 。の 部分文字列(int インデックス) メソッドは、指定されたインデックスから最後までの文字列を返します。ただし、返された文字列を格納する文字列変数がないため、破棄されます。 IndexOf(文字列 s2) メソッドは最初に出現したインデックスを返します。 s2 。したがって、4 は s1='JavaLove' として出力されます。 プログラム 5 : Java class Writer { public static void write () { System . out . println ( 'Writing...' ); } } class Author extends Writer { public static void write () { System . out . println ( 'Writing book' ); } } public class Programmer extends Author { public static void write () { System . out . println ( 'Writing code' ); } public static void main ( String [] args ) { Author a = new Programmer (); a . write (); } }
オプション: A) 書く... B) 本を書く C) コードを書く D) コンパイルが失敗する 答え : B) 執筆本 説明 : 静的メソッドはオーバーライドできないため、どのクラス オブジェクトが作成されるかは関係ありません。として ある です 著者 参照型なので常に 著者 クラスメソッドが呼び出されます。取り除いたら 書く() からのメソッド 著者 それからクラス ライター クラスメソッドは次のように呼び出されます 著者 クラスが拡張する ライター クラス。