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