Výstup programu Java | Sada 7

Úroveň obtížnosti: Střední Předvídat výstup následujících programů Java. 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  ();      }   }   
Možnosti : A) 20 B) 100 C) 1000 D) 2 Odpověď: A) 20 Vysvětlení: Zde je název proměnné instance třídy (num) stejný jako calc() název lokální proměnné metody(num). Takže pro odkazování na proměnnou instance třídy from calc() metoda tento používá se klíčové slovo. Tedy ve vyjádření this.num = num * 10 v a představuje lokální proměnnou metody, jejíž hodnota je 2 a toto.č představuje proměnnou instance třídy, jejíž počáteční hodnota je 100. Nyní in printNum() metoda, protože nemá žádnou lokální proměnnou, jejíž název je stejný jako proměnná instance třídy, takže ji můžeme přímo použít v a i když odkazovat na proměnnou instance toto.č lze použít.   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  ;      }   }   
Možnosti : A) Výstup je pravdivý a MyStuff splňuje kontrakt Object.equals(). B) Výstup je nepravdivý a MyStuff splňuje kontrakt Object.equals(). C) Výstup je pravdivý a MyStuff NEPLNÍ kontrakt Object.equals(). D) Výstup je nepravdivý a MyStuff NEPLNÍ kontrakt Object.equals(). odpověď: C) Výstup je pravdivý a MyStuff NEPLNÍ kontrakt Object.equals(). Vysvětlení: Jak rovná se (objekt objektu) metoda ve třídě Object porovnává dva objekty na základě vztahu ekvivalence. Ale tady jen potvrzujeme, že objekt je nulový nebo ne, takže to nesplňuje Object.equals() smlouva. Jak m1 není null true bude vytištěno.   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  ();      }   }   
Možnosti : A) alfa beta b b B) alfa beta a b C) beta alfa b b D) beta alfa a b odpověď: A) alfa beta b b Vysvětlení: Prohlášení nová beta().go() provádí ve dvou fázích. V první fázi Beta je volán konstruktor třídy. Není přítomen žádný člen instance Beta třída. Takže teď Beta je proveden konstruktor třídy. Jak Beta třída se rozšiřuje Alfa třídy, takže zavolejte na Alfa konstruktor třídy jako první příkaz ve výchozím nastavení (vloženo kompilátorem) je super() v Beta konstruktor třídy. Nyní jako jedna proměnná instance ( typ ) je přítomen v Alfa třída tak to dostane paměť a hned Alfa konstruktor třídy se provede a poté zavolá return to Beta další příkaz konstruktoru třídy. Tak alfa beta je vytištěno. Ve druhé fázi jít() na tento objekt je volána metoda. Protože existuje pouze jedna proměnná ( typ ) v objektu, jehož hodnota je A . Bude tedy změněno na b a vytištěno dvakrát. The super klíčové slovo tady je to k ničemu.   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  );      }   }   
Možnosti : A) -1 B) 3 C) 4 D) A Výjimka StringIndexOutOfBounds je vyvolán za běhu. odpověď: C) 4 Vysvětlení: připojit (string string) methodconcatenate the str to s1 . The podřetězec (int index) metoda vrátí řetězec z daného indexu na konec. Ale protože neexistuje žádná proměnná String pro uložení vrácených řetězců, bude zničena. Nyní indexOf(String s2) metoda vrací index prvního výskytu s2 . Takže 4 se vytiskne jako 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  ();      }   }   
Možnosti : A) Psaní... B) Kniha psaní C) Psaní kódu D) Kompilace se nezdařila odpověď: B) Psaní knihy Vysvětlení: Protože statické metody nelze přepsat, nezáleží na tom, který objekt třídy je vytvořen. Jak A je a Autor odkazovaný typ tak vždy Autor je volána metoda třídy. Pokud odstraníme napsat() metoda od Autor třída pak Spisovatel metoda třídy se nazývá jako Autor třída se rozšiřuje Spisovatel třída.