Uitvoer van Java-programma | Stel 8 in

Moeilijkheidsgraad : Tussenliggend
Voorspel de uitvoer van de volgende Java-programma's.
Programma 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'  );      }   }   

Uitgang: 
 

Not equal 


Uitleg: Omdat s1 en s2 twee verschillende objecten zijn, zijn de referenties niet hetzelfde en vergelijkt de == operator de objectreferentie. Er wordt dus 'Niet gelijk' afgedrukt om de daadwerkelijke tekens in de string te vergelijken. De methode equals() moet worden gebruikt. 
 
Programma 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  ();         }   }   

Uitgang: 
 

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


Uitleg: Statische binding (of compileertijd) vindt plaats voor statische methoden. Hier p.wiebenik() roept de statische methode aan, zodat deze wordt aangeroepen tijdens het compileren, wat resulteert in een statische binding en de methode wordt afgedrukt in de Person-klasse. 
Terwijl p.wieBenJij() roept de methode aan Kind class omdat Java het standaard als een virtuele methode beschouwt, dat wil zeggen dynamische binding.
 
Programma 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'  );      }   }   

Uitgang: 
 

First statement of try block 15 finally block Main method 


Uitleg:  
Omdat er geen uitzondering is, wordt het catch-blok niet aangeroepen, maar de Eindelijk blok wordt altijd uitgevoerd na een try-blok, ongeacht of de uitzondering wordt afgehandeld of niet.
  
Programma 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  ();      }   }   

Uitgang: 
 

gfg1gfg1gfg3 


Uitleg : In eerste instantie wordt een nieuwe thread gestart met de naam gfg1 vervolgens voert de eerste run-methode in klasse twee de thread met de naam uit gfg1 daarna wordt een nieuwe thread gemaakt die de run-methode aanroept, maar aangezien een nieuwe thread kan worden gemaakt door alleen de start-methode aan te roepen, voert de vorige thread de actie uit en opnieuw gfg1 wordt afgedrukt. Er wordt nu een nieuwe thread gemaakt door de startmethode aan te roepen, zodat een nieuwe thread begint gfg3 naam en dus afdrukken gfg3 .