إخراج برنامج جافا | مجموعة 8

مستوى الصعوبة : متوسط
التنبؤ بمخرجات برامج جافا التالية.
البرنامج 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:  
 

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) 


توضيح: يحدث الربط الثابت (أو وقت الترجمة) للطرق الثابتة. هنا ص.whoAmI() يستدعي الطريقة الثابتة لذلك يتم استدعاؤها أثناء وقت الترجمة ومن ثم يؤدي إلى ربط ثابت ويطبع الطريقة في فئة الشخص. 
بينما 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 


توضيح:  
نظرًا لعدم وجود استثناء، لا يتم استدعاء كتلة الالتقاط ولكن أخيراً يتم تنفيذ الكتلة دائمًا بعد كتلة المحاولة سواء تمت معالجة الاستثناء أم لا.
  
البرنامج 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 ثم في الفصل الثاني، تقوم طريقة التشغيل الأولى بتشغيل الخيط بالاسم gfg1 ثم بعد ذلك يتم إنشاء مؤشر ترابط جديد لاستدعاء طريقة التشغيل ولكن بما أنه يمكن إنشاء مؤشر ترابط جديد عن طريق استدعاء طريقة البدء فقط، فإن مؤشر الترابط السابق يقوم بالإجراء مرة أخرى gfg1 تمت طباعته. الآن يتم إنشاء مؤشر ترابط جديد عن طريق استدعاء طريقة البدء بحيث يبدأ مؤشر ترابط جديد gfg3 الاسم وبالتالي المطبوعات gfg3 .