Ausgabe des Java-Programms | Satz 7

Schwierigkeitsgrad: Mittelstufe Sagen Sie die Ausgabe der folgenden Java-Programme voraus. Programm 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  ();      }   }   
Optionen: A) 20 B) 100 C) 1000 D) 2 Antwort: A) 20 Erläuterung : Hier ist der Name der Klasseninstanzvariablen (num) derselbe wie calc() Name der lokalen Variablen der Methode (Anzahl). Also zum Referenzieren der Klasseninstanzvariablen von calc() Verfahren Das Schlüsselwort verwendet wird. Also in der Aussage this.num = num * 10 in einem stellt eine lokale Variable der Methode dar, deren Wert 2 ist und diese.num stellt eine Klasseninstanzvariable dar, deren Anfangswert 100 ist. Jetzt in printNum() Methode, da sie keine lokale Variable hat, deren Name mit der Klasseninstanzvariablen übereinstimmt, sodass wir sie direkt verwenden können in einem um auf die Instanzvariable zu verweisen diese.num verwendet werden kann.   Programm 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  ;      }   }   
Optionen: A) Die Ausgabe ist wahr und MyStuff erfüllt den Object.equals()-Vertrag. B) Die Ausgabe ist falsch und MyStuff erfüllt den Object.equals()-Vertrag. C) Die Ausgabe ist wahr und MyStuff erfüllt den Object.equals()-Vertrag NICHT. D) Die Ausgabe ist falsch und MyStuff erfüllt den Object.equals()-Vertrag NICHT. Antwort : C) Die Ausgabe ist wahr und MyStuff erfüllt den Object.equals()-Vertrag NICHT. Erläuterung : Als equal(Objekt obj) Die Methode in der Object-Klasse vergleicht zwei Objekte auf der Grundlage einer Äquivalenzbeziehung. Aber hier bestätigen wir nur, dass das Objekt null ist oder nicht. Es erfüllt also nicht die Anforderungen Object.equals() Vertrag. Als m1 ist nicht null true wird gedruckt.   Programm 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  ();      }   }   
Optionen: A) Alpha Beta b b B) Alpha Beta a b C) Beta Alpha b b D) Beta Alpha a b Antwort : A) Alpha Beta b b Erläuterung : Die Aussage neue Beta().go() wird in zwei Phasen ausgeführt. In der ersten Phase Beta Der Klassenkonstruktor wird aufgerufen. Es ist kein Instanzmitglied vorhanden Beta Klasse. Also jetzt Beta Der Klassenkonstruktor wird ausgeführt. Als Beta Klasse erweitert Alpha Klasse, also Anruf geht an Alpha Der Klassenkonstruktor ist standardmäßig die erste Anweisung (vom Compiler gesetzt). super() im Beta Klassenkonstruktor. Jetzt als eine Instanzvariable( Typ ) ist vorhanden in Alpha Klasse, damit es Speicher bekommt und jetzt Alpha Der Klassenkonstruktor wird ausgeführt und dann „return to“ aufgerufen Beta Nächste Anweisung des Klassenkonstruktors. Also Alpha-Beta gedruckt wird. In der zweiten Phase gehen() Die Methode wird für dieses Objekt aufgerufen. Da es nur eine Variable gibt( Typ ) im Objekt, dessen Wert ist A . Es wird also geändert in B und zweimal gedruckt. Der Super-Schlüsselwort hier nützt es nichts.   Programm 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  );      }   }   
Optionen: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException wird zur Laufzeit geworfen. Antwort : C) 4 Erläuterung : append(String str) methodconcatenate the str to s1 . Der Teilzeichenfolge (int index) Die Methode gibt den String vom angegebenen Index bis zum Ende zurück. Da es jedoch keine String-Variable zum Speichern der zurückgegebenen Zeichenfolge gibt, wird diese jetzt zerstört indexOf(String s2) Die Methode gibt den Index des ersten Vorkommens von zurück s2 . Also wird 4 als s1='JavaLove' gedruckt.   Programm 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  ();      }   }   
Optionen: A) Schreiben... B) Schreiben eines Buches C) Schreiben von Code D) Kompilierung schlägt fehl Antwort : B) Schreibbuch Erläuterung : Da statische Methoden nicht überschrieben werden können, spielt es keine Rolle, welches Klassenobjekt erstellt wird. Als A ist ein Autor referenzierter Typ also immer Autor Klassenmethode aufgerufen wird. Wenn wir entfernen schreiben() Methode von Autor Klasse dann Schriftsteller Die Klassenmethode wird aufgerufen als Autor Klasse erweitert Schriftsteller Klasse.