Output af Java-program | Sæt 8

Sværhedsgrad : Mellem
Forudsige outputtet af følgende Java-programmer.
Program 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'  );      }   }   

Produktion: 
 

Not equal 


Forklaring: Da s1 og s2 er to forskellige objekter, er referencerne ikke de samme, og ==-operatoren sammenligner objektreference. Så den udskriver 'Ikke ens' for at sammenligne de faktiske tegn i strengen .equals()-metoden skal bruges. 
 
Program 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  ();         }   }   

Produktion: 
 

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


Forklaring: Statisk binding (eller kompileringstid) sker for statiske metoder. Her p.whoAmI() kalder den statiske metode, så den kaldes under kompileringstiden og resulterer derfor i statisk binding og udskriver metoden i klassen Person. 
Hvorimod p.whoAreYou() kalder metoden ind knægt klasse, da Java som standard tager det som en virtuel metode, dvs. dynamisk binding.
 
Program 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'  );      }   }   

Produktion: 
 

First statement of try block 15 finally block Main method 


Forklaring:  
Da der ikke er nogen undtagelse, kaldes catch-blokken ikke, men den endelig blok udføres altid efter en forsøgsblok, uanset om undtagelsen håndteres eller ej.
  
Program 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  ();      }   }   

Produktion: 
 

gfg1gfg1gfg3 


Forklaring: I første omgang startes en ny tråd med navn gfg1 så i klasse to kører den første kørselsmetode tråden med navnet gfg1 derefter oprettes en ny tråd, der kalder kørselsmetoden, men da en ny tråd kun kan oprettes ved at kalde startmetoden, så udfører den forrige tråd handlingen og igen gfg1 er udskrevet. Nu oprettes en ny tråd ved at kalde startmetoden, så en ny tråd starter med gfg3 navn og dermed tryk gfg3 .