logo

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.