logo

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.