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.