logo

Uitvoer van Java-programma | Stel 7 in

Moeilijkheidsgraad: Gemiddeld Voorspel de uitvoer van de volgende Java-programma's. Programma 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();  } } 
Opties: A) 20 B) 100 C) 1000 D) 2 Antwoord: A) 20 Uitleg : Hier is de klasse-instantievariabele name(num) hetzelfde als berekenen() methode lokale variabele naam(num). Dus voor het verwijzen naar de klasse-instantievariabele van berekenen() methode dit trefwoord wordt gebruikt. Dus in verklaring dit.num = num * 10 in een vertegenwoordigt de lokale variabele van de methode waarvan de waarde 2 en is dit.num vertegenwoordigt een klasse-instantievariabele waarvan de initiële waarde 100 is. Nu in printNum() methode omdat deze geen lokale variabele heeft waarvan de naam hetzelfde is als de klasse-instantievariabele, zodat we deze direct kunnen gebruiken in een om naar een instantievariabele te verwijzen, hoewel dit.num kan worden gebruikt.   Programma 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;  } } 
Opties: A) De uitvoer is waar en MyStuff voldoet aan het Object.equals()-contract. B) De uitvoer is false en MyStuff voldoet aan het Object.equals()-contract. C) De uitvoer is waar en MyStuff voldoet NIET aan het Object.equals()-contract. D) De uitvoer is false en MyStuff voldoet NIET aan het Object.equals()-contract. Antwoord : C) De uitvoer is waar en MyStuff voldoet NIET aan het Object.equals()-contract. Uitleg : Als is gelijk aan(Objectobject) methode in Objectklasse vergelijkt twee objecten op basis van equivalentierelatie. Maar hier bevestigen we alleen dat het object nul is of niet. Het voldoet dus niet Object.is gelijk aan() contract. Als m1 is niet nul waar wordt afgedrukt.   Programma 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();  } } 
Opties: A) alfa bèta b b B) alfa bèta a b C) bèta alfa b b D) bèta alfa a b Antwoord : A) alfa bèta b b Uitleg : De verklaring nieuwe bèta().go() wordt in twee fases uitgevoerd. In eerste fase Bèta klasseconstructor wordt aangeroepen. Er is geen instancelid aanwezig in Bèta klas. Dus nu Bèta klasseconstructor wordt uitgevoerd. Als Bèta klasse strekt zich uit Alfa klasse dus oproep gaat naar Alfa klasseconstructor als eerste instructie standaard (geplaatst door de compiler) is super() in de Bèta klasse constructor. Nu als één instantievariabele( type ) aanwezig is Alfa klasse zodat het geheugen krijgt en nu Alfa klasseconstructor wordt uitgevoerd en bel vervolgens return to Bèta volgende instructie van de klassenconstructor. Dus alfa bèta wordt afgedrukt. In tweede fase gaan() methode wordt op dit object aangeroepen. Omdat er maar één variabele is ( type ) in het object waarvan de waarde is A . Het zal dus veranderd worden in B en twee keer afgedrukt. De supertrefwoord hier heeft geen nut.   Programma 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);  } } 
Opties: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException wordt tijdens runtime gegooid. Antwoord : C) 4 Uitleg : toevoegen(Stringstr) methodevoeg de str samen tot s1 . De subtekenreeks(int index) methode retourneert de String van de gegeven index naar het einde. Maar omdat er geen String-variabele is om de geretourneerde strings op te slaan, wordt deze vernietigd. Nu indexOf(String s2) methode retourneert de index van de eerste keer dat deze voorkomt s2 . Dus 4 wordt afgedrukt als s1='JavaLove'.   Programma 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();  } } 
Opties: A) Schrijven... B) Boek schrijven C) Code schrijven D) Compilatie mislukt Antwoord : B) Boek schrijven Uitleg : Omdat statische methoden niet kunnen worden overschreven, maakt het niet uit welk klasseobject wordt gemaakt. Als A is een Auteur type waarnaar wordt verwezen, dus altijd Auteur klassemethode wordt aangeroepen. Als we verwijderen schrijven() methode uit Auteur klasse dan Schrijver class-methode wordt genoemd als Auteur klasse strekt zich uit Schrijver klas.