Java プログラムの出力 |セット8

難易度 : 中級
以下の Java プログラムの出力を予測します。
プログラム 1:
 

Java
   class   GfG   {      public     static     void     main  (  String     args  []  )      {      String     s1     =     new     String  (  'geeksforgeeks'  );      String     s2     =     new     String  (  'geeksforgeeks'  );      if     (  s1     ==     s2  )         System  .  out  .  println  (  'Equal'  );      else      System  .  out  .  println  (  'Not equal'  );      }   }   

出力: 
 

Not equal 


説明: s1 と s2 は 2 つの異なるオブジェクトであるため、参照は同じではなく、== 演算子はオブジェクト参照を比較します。したがって、文字列内の実際の文字を比較するには、「等しくない」と出力されます。equals() メソッドを使用する必要があります。 
 
プログラム 2:  
 

Java
   class   Person      {         private     void     who  ()      {      System  .  out  .  println  (  'Inside private method Person(who)'  );      }          public     static     void     whoAmI  ()      {      System  .  out  .  println  (  'Inside static method Person(whoAmI)'  );      }          public     void     whoAreYou  ()      {      who  ();      System  .  out  .  println  (  'Inside virtual method Person(whoAreYou)'  );      }   }   class   Kid     extends     Person   {         private     void     who  ()      {      System  .  out  .  println  (  'Kid(who)'  );      }          public     static     void     whoAmI  ()      {      System  .  out  .  println  (  'Kid(whoAmI)'  );      }          public     void     whoAreYou  ()      {      who  ();      System  .  out  .  println  (  'Kid(whoAreYou)'  );      }   }   public     class   Gfg   {      public     static     void     main  (  String     args  []  )         {      Person     p     =     new     Kid  ();         p  .  whoAmI  ();         p  .  whoAreYou  ();         }   }   

出力: 
 

Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou) 


説明: 静的バインディング (またはコンパイル時) は静的メソッドに対して発生します。ここ p.whoAmI() 静的メソッドを呼び出します。このメソッドはコンパイル時に呼び出されるため、静的バインドが行われ、メソッドが Person クラスに出力されます。 
一方 p.whoAreYou() でメソッドを呼び出します 子供 Java はデフォルトでこのクラスを仮想メソッド、つまり動的バインディングとして受け取るためです。
 
プログラム 3:  
 

Java
   class   GfG   {      public     static     void     main  (  String     args  []  )      {      try      {      System  .  out  .  println  (  'First statement of try block'  );      int     num  =  45  /  3  ;      System  .  out  .  println  (  num  );      }      catch  (  Exception     e  )      {      System  .  out  .  println  (  'Gfg caught Exception'  );      }      finally      {      System  .  out  .  println  (  'finally block'  );      }      System  .  out  .  println  (  'Main method'  );      }   }   

出力: 
 

First statement of try block 15 finally block Main method 


説明:  
例外がないため、catch ブロックは呼び出されませんが、 ついに 例外が処理されるかどうかに関係なく、ブロックは常に try ブロックの後に実行されます。
  
プログラム 4:  
 

Java
   class   One     implements     Runnable      {      public     void     run  ()         {      System  .  out  .  print  (  Thread  .  currentThread  ().  getName  ());      }   }   class   Two     implements     Runnable      {      public     void     run  ()         {      new     One  ().  run  ();      new     Thread  (  new     One  ()  'gfg2'  ).  run  ();      new     Thread  (  new     One  ()  'gfg3'  ).  start  ();      }   }   class   Three      {      public     static     void     main     (  String  []     args  )         {      new     Thread  (  new     Two  ()  'gfg1'  ).  start  ();      }   }   

出力: 
 

gfg1gfg1gfg3 


説明 : 最初に新しいスレッドが名前で開始されます GFG1 次に、クラス 2 で、最初の run メソッドが名前のスレッドを実行します。 GFG1 その後、run メソッドを呼び出して新しいスレッドが作成されますが、新しいスレッドは start メソッドを呼び出すことによってのみ作成できるため、前のスレッドがアクションを実行して再度実行されます。 GFG1 これで、start メソッドを呼び出して新しいスレッドが作成され、新しいスレッドが開始されます。 GFG3 名前とそれによるプリント GFG3