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() 에서 메소드를 호출합니다. 어린이 클래스는 기본적으로 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에서 첫 번째 실행 메소드는 다음 이름의 스레드를 실행합니다. gfg1 그런 다음 run 메소드를 호출하여 새 스레드가 생성되지만 start 메소드를 호출해야만 새 스레드가 생성될 수 있으므로 이전 스레드가 작업을 수행하고 다시 수행합니다. gfg1 인쇄됩니다. 이제 start 메소드를 호출하여 새 스레드가 생성되므로 새 스레드는 gfg3 이름을 붙여서 인쇄합니다. gfg3 .