logo

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.