logo

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) 執筆本 説明 : 静的メソッドはオーバーライドできないため、どのクラス オブジェクトが作成されるかは関係ありません。として ある です 著者 参照型なので常に 著者 クラスメソッドが呼び出されます。取り除いたら 書く() からのメソッド 著者 それからクラス ライター クラスメソッドは次のように呼び出されます 著者 クラスが拡張する ライター クラス。