Java-ohjelman tulos | Sarja 7

Vaikeustaso: Keskitaso Ennusta seuraavien Java-ohjelmien tulos. Ohjelma 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  ();      }   }   
Vaihtoehdot: A) 20 B) 100 C) 1000 D) 2 Vastaus: A) 20 Selitys: Tässä luokan ilmentymän muuttujan nimi(num) on sama kuin calc() menetelmä paikallisen muuttujan nimi(num). Joten viitattaessa luokkainstanssimuuttujaan calc() menetelmä tämä avainsanaa käytetään. Siis lausunnossa this.num = num * 10 kohdassa a edustaa menetelmän paikallista muuttujaa, jonka arvo on 2 ja this.nm edustaa luokan ilmentymämuuttujaa, jonka alkuarvo on 100. Nyt sisään printNum() menetelmä, koska sillä ei ole paikallista muuttujaa, jonka nimi on sama kuin luokan ilmentymämuuttuja, joten voimme käyttää sitä suoraan kohdassa a viitata ilmentymän muuttujaan vaikka this.nm voidaan käyttää.   Ohjelma 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  ;      }   }   
Vaihtoehdot: A) Tulos on tosi ja MyStuff täyttää Object.equals() -sopimuksen. B) Tulos on epätosi ja MyStuff täyttää Object.equals() -sopimuksen. C) Tulos on tosi ja MyStuff EI täytä Object.equals() -sopimusta. D) Tulos on epätosi ja MyStuff EI täytä Object.equals() -sopimusta. Vastaus: C) Tulos on tosi ja MyStuff EI täytä Object.equals() -sopimusta. Selitys: Kuten yhtä kuin (objektiobjekti) Object-luokan menetelmä vertaa kahta objektia ekvivalenssirelaation perusteella. Mutta tässä me vain vahvistamme, että objekti on tyhjä vai ei, joten se ei täytä Object.equals() sopimus. Kuten m1 ei ole tyhjä tosi tulostetaan.   Ohjelma 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  ();      }   }   
Vaihtoehdot: A) alfa beeta b b B) alfa beeta a b C) beeta alfa b b D) beeta alfa a b Vastaus: A) alfa beeta b b Selitys: Lausunto uusi Beta().go() suoritetaan kahdessa vaiheessa. Ensimmäisessä vaiheessa Beeta luokan konstruktoria kutsutaan. Instanssijäsentä ei ole paikalla Beeta luokkaa. Joten nyt Beeta luokan konstruktori suoritetaan. Kuten Beeta luokka laajenee Alpha luokka, joten puhelu menee Alpha luokan konstruktori ensimmäisenä lauseena oletuksena (kääntäjän asettama). super() in Beeta luokan rakentaja. Nyt yhtenä esiintymän muuttujana ( tyyppi ) on läsnä Alpha luokkaa, jotta se saa muistin ja nyt Alpha luokan konstruktori suoritetaan ja sitten kutsu paluu Beeta luokan konstruktori seuraava lause. Niin alfa beta on painettu. Toisessa vaiheessa mennä() menetelmää kutsutaan tässä objektissa. Koska on vain yksi muuttuja ( tyyppi ) objektissa, jonka arvo on a . Joten se muutetaan b ja painettu kaksi kertaa. The super avainsana tästä ei ole mitään hyötyä.   Ohjelma 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  );      }   }   
Vaihtoehdot: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException heitetään ajon aikana. Vastaus: C) 4 Selitys: liittää (merkkijono str) Methodeconcatenate str to s1 . The osamerkkijono (int-indeksi) menetelmä palauttaa merkkijonon annetusta indeksistä loppuun. Mutta koska palautetun merkkijonon tallentamiseen ei ole mitään merkkijonomuuttujaa, se tuhotaan.Nyt indexOf(merkkijono s2) menetelmä palauttaa ensimmäisen esiintymisen indeksin s2 . Joten 4 tulostetaan muodossa s1='JavaLove'.   Ohjelma 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  ();      }   }   
Vaihtoehdot: A) Kirjoittaminen... B) Kirjoituskirja C) Kirjoituskoodi D) Kääntäminen epäonnistuu Vastaus: B) Kirjoituskirja Selitys: Koska staattisia menetelmiä ei voi ohittaa, ei ole väliä mikä luokkaobjekti luodaan. Kuten a on a Tekijä viitattu tyyppi, joten aina Tekijä luokan menetelmää kutsutaan. Jos poistamme kirjoittaa() menetelmä alkaen Tekijä luokkaa sitten Kirjailija luokan menetelmää kutsutaan nimellä Tekijä luokka laajenee Kirjailija luokkaa.