Output af Java-program | Sæt 7

Sværhedsgrad: Mellem Forudsig output fra følgende Java-programmer. Program 1: Java
   public     class   Calculator   {      int     num     =     100  ;      public     void     calc  (  int     num  )     {     this  .  num     =     num     *     10  ;     }      public     void     printNum  ()     {     System  .  out  .  println  (  num  );     }      public     static     void     main  (  String  []     args  )      {      Calculator     obj     =     new     Calculator  ();      obj  .  calc  (  2  );      obj  .  printNum  ();      }   }   
Valgmuligheder: A) 20 B) 100 C) 1000 D) 2 Svar: A) 20 Forklaring: Her er klasseinstansvariablen navn(antal) den samme som calc() metode lokal variabel navn(antal). Så for at henvise til klasseforekomstvariabel fra calc() metode denne søgeord er brugt. Så i statement dette.tal = antal * 10 i en repræsenterer den lokale variabel for metoden, hvis værdi er 2 og dette.num repræsenterer klasseinstansvariabel, hvis startværdi er 100. Nu i printNum() metode, da den ikke har nogen lokal variabel, hvis navn er det samme som klasseforekomstvariabel, så vi direkte kan bruge i en at referere instansvariabel selvom dette.num kan bruges.   Program 2: Java
   public     class   MyStuff   {      String     name  ;      MyStuff  (  String     n  )     {     name     =     n  ;     }      public     static     void     main  (  String  []     args  )      {      MyStuff     m1     =     new     MyStuff  (  'guitar'  );      MyStuff     m2     =     new     MyStuff  (  'tv'  );      System  .  out  .  println  (  m2  .  equals  (  m1  ));      }      @Override      public     boolean     equals  (  Object     obj  )      {      MyStuff     m     =     (  MyStuff  )     obj  ;      if     (  m  .  name     !=     null  )     {     return     true  ;     }      return     false  ;      }   }   
Valgmuligheder: A) Outputtet er sandt, og MyStuff opfylder Object.equals()-kontrakten. B) Outputtet er falsk, og MyStuff opfylder Object.equals()-kontrakten. C) Outputtet er sandt, og MyStuff opfylder IKKE Object.equals()-kontrakten. D) Outputtet er falsk, og MyStuff opfylder IKKE Object.equals()-kontrakten. Svar: C) Outputtet er sandt, og MyStuff opfylder IKKE Object.equals()-kontrakten. Forklaring: Som er lig med (Objekt obj) metode i objektklassen sammenligner to objekter på basis af ækvivalensrelation. Men her bekræfter vi bare, at objektet er null eller ej, så det opfylder ikke Object.equals() kontrakt. Som m1 er ikke null sand vil blive udskrevet.   Program 3: Java
   class   Alpha   {      public     String     type     =     'a '  ;      public     Alpha  ()     {     System  .  out  .  print  (  'alpha '  );     }   }   public     class   Beta     extends     Alpha   {      public     Beta  ()     {     System  .  out  .  print  (  'beta '  );     }      void     go  ()      {      type     =     'b '  ;      System  .  out  .  print  (  this  .  type     +     super  .  type  );      }      public     static     void     main  (  String  []     args  )      {      new     Beta  ().  go  ();      }   }   
Valgmuligheder: A) alfa beta b b B) alfa beta a b C) beta alfa b b D) beta alfa a b Svar: A) alfa beta b b Forklaring: Udtalelsen ny Beta().go() udføres i to faser. I første fase Beta klasse konstruktør kaldes. Der er intet instansmedlem til stede i Beta klasse. Så nu Beta klassekonstruktør udføres. Som Beta klasse strækker sig Alfa klasse så opkald går til Alfa klasse konstruktør som første sætning som standard (sat af compileren) er super() i Beta klasse konstruktør. Nu som én instansvariabel( type ) er til stede i Alfa klasse, så den får hukommelse og nu Alfa klassekonstruktør udføres, kald derefter tilbage til Beta klassekonstruktør næste udsagn. Så alfa beta er udskrevet. I anden fase gå() metode kaldes på dette objekt. Da der kun er én variabel( type ) i det objekt, hvis værdi er -en . Så det bliver ændret til b og trykt to gange. De super nøgleord her nytter ikke noget.   Program 4: Java
   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      StringBuilder     s1     =     new     StringBuilder  (  'Java'  );      String     s2     =     'Love'  ;      s1  .  append  (  s2  );      s1  .  substring  (  4  );      int     foundAt     =     s1  .  indexOf  (  s2  );      System  .  out  .  println  (  foundAt  );      }   }   
Valgmuligheder: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException kastes under kørsel. Svar: C) 4 Forklaring: append(String str) metodesammenkæd str til s1 . De understreng (int index) metode returnerer strengen fra det givne indeks til slutningen. Men da der ikke er nogen strengvariabel til at gemme den returnerede streng, så vil den blive ødelagt. Nu indexOf(String s2) metode returnere indekset for første forekomst af s2 . Så 4 udskrives som s1='JavaLove'.   Program 5: Java
   class   Writer   {      public     static     void     write  ()      {      System  .  out  .  println  (  'Writing...'  );      }   }   class   Author     extends     Writer   {      public     static     void     write  ()      {      System  .  out  .  println  (  'Writing book'  );      }   }   public     class   Programmer     extends     Author   {      public     static     void     write  ()      {      System  .  out  .  println  (  'Writing code'  );      }      public     static     void     main  (  String  []     args  )      {      Author     a     =     new     Programmer  ();      a  .  write  ();      }   }   
Valgmuligheder: A) Skrivning... B) Skrivning af bog C) Skrivning af kode D) Kompilering mislykkes Svar: B) Skrivebog Forklaring: Da statiske metoder ikke kan tilsidesættes, er det lige meget hvilket klasseobjekt der oprettes. Som -en er en Forfatter refererede type så altid Forfatter klasse metode kaldes. Hvis vi fjerner skrive() metode fra Forfatter klasse så Forfatter klasse metode kaldes som Forfatter klasse strækker sig Forfatter klasse.