Вихід програми 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 є різними об’єктами, посилання не однакові, і оператор == порівнює посилання на об’єкт. Таким чином, для порівняння фактичних символів у рядку виводиться «Не дорівнює», необхідно використовувати метод .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() викликає метод in малюк оскільки за замовчуванням 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 тоді в класі Two перший запущений метод запускає потік з іменем gfg1 тоді після цього створюється новий потік із викликом методу run, але оскільки новий потік можна створити лише за допомогою виклику методу start, тому дію виконує попередній потік і знову gfg1 друкується. Тепер новий потік створюється шляхом виклику методу start, щоб новий потік починався з gfg3 назву і, отже, відбитки gfg3 .