Utdata fra Java-program | Sett 7

Vanskelighetsgrad: Middels Forutsi resultatet av 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  ();      }   }   
Alternativer: A) 20 B) 100 C) 1000 D) 2 Svar: A) 20 Forklaring: Her er klasseforekomstvariabelen navn(num) den samme som calc() metode lokal variabel navn(tall). Så for å referere til klasseforekomstvariabel fra calc() metode dette søkeord brukes. Så i uttalelsen this.num = num * 10 i en representerer lokal variabel for metoden hvis verdi er 2 og dette.num representerer klasseforekomstvariabel hvis startverdi er 100. Nå i printNum() metode siden den ikke har noen lokal variabel hvis navn er det samme som klasseforekomstvariabelen, slik at vi kan bruke den direkte i en å referere forekomstvariabel selv om dette.num kan brukes.   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  ;      }   }   
Alternativer: A) Utdataene er sanne og MyStuff oppfyller Object.equals()-kontrakten. B) Utdataene er falske og MyStuff oppfyller Object.equals()-kontrakten. C) Utdataene er sanne og MyStuff oppfyller IKKE Object.equals()-kontrakten. D) Utdataene er falske og MyStuff oppfyller IKKE Object.equals()-kontrakten. Svar: C) Utdataene er sanne og MyStuff oppfyller IKKE Object.equals()-kontrakten. Forklaring: Som lik (Objekt objekt) metode i objektklassen sammenligner to objekter på grunnlag av ekvivalensrelasjon. Men her bekrefter vi bare at objektet er null eller ikke, så det oppfyller ikke Object.equals() kontrakt. Som m1 er ikke null true vil bli skrevet ut.   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  ();      }   }   
Alternativer: 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: Uttalelsen new Beta().go() utføres i to faser. I første fase Beta klasse konstruktør kalles. Det er ingen instansmedlem til stede i Beta klasse. Så nå Beta klassekonstruktør er utført. Som Beta klasse strekker seg Alfa klasse så samtalen går til Alfa klasse konstruktør som første setning som standard (sett av kompilatoren) er super() i Beta klasse konstruktør. Nå som én instansvariabel( type ) er tilstede i Alfa klasse så den får minne og nå Alfa klassekonstruktør utføres, og kall deretter tilbake til Beta klasse konstruktør neste uttalelse. Så alfa beta er skrevet ut. I andre fase gå() metode kalles på dette objektet. Siden det bare er én variabel( type ) i objektet hvis verdi er en . Så det blir endret til b og trykket to ganger. De super nøkkelord her nytter det ikke.   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  );      }   }   
Alternativer: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException kastes under kjøring. Svar: C) 4 Forklaring: append(String str) metodekonkatener str til s1 . De understreng (int index) metoden returnerer strengen fra den gitte indeksen til slutten. Men siden det ikke er noen strengvariabel for å lagre den returnerte strengen, så vil den bli ødelagt. Nå indexOf(String s2) metode returnerer indeksen for første forekomst av s2 . Så 4 skrives ut 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  ();      }   }   
Alternativer: A) Skrive... B) Skrive bok C) Skrive kode D) Kompilering mislykkes Svar: B) Skrivebok Forklaring: Siden statiske metoder ikke kan overstyres, spiller det ingen rolle hvilket klasseobjekt som er opprettet. Som en er en Forfatter referert type så alltid Forfatter klassemetoden kalles. Hvis vi fjerner skrive() metode fra Forfatter klasse da Forfatter klassemetoden kalles som Forfatter klasse strekker seg Forfatter klasse.