Utdata från Java-program | Set 7

Svårighetsgrad: Intermediate Förutsäg resultatet av följande Java-program. 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  ();      }   }   
Alternativ: A) 20 B) 100 C) 1000 D) 2 Svar: A) 20 Förklaring: Här är klassinstansvariabeln name(num) samma som calc() metod lokal variabel namn(antal). Så för att referera till klassinstansvariabel från calc() metod detta nyckelord används. Så i statement this.num = num * 10 i en representerar den lokala variabeln för metoden vars värde är 2 och detta.num representerar klassinstansvariabel vars initiala värde är 100. Nu in printNum() metod eftersom den inte har någon lokal variabel vars namn är samma som klassinstansvariabel så vi kan direkt använda i en att referera till instansvariabel men detta.num kan användas.   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  ;      }   }   
Alternativ: A) Utdata är sant och MyStuff uppfyller Object.equals()-kontraktet. B) Utdata är falsk och MyStuff uppfyller kontraktet Object.equals(). C) Utdata är sant och MyStuff uppfyller INTE Object.equals()-kontraktet. D) Utdatat är falskt och MyStuff uppfyller INTE Object.equals()-kontraktet. Svar: C) Utdata är sant och MyStuff uppfyller INTE Object.equals()-kontraktet. Förklaring: Som lika (Objekt objekt) metod i klassen Objekt jämför två objekt på basis av ekvivalensrelation. Men här bekräftar vi bara att objektet är null eller inte, så det uppfyller inte Object.equals() kontrakt. Som m1 är inte null sant kommer att skrivas 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  ();      }   }   
Alternativ: 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 Förklaring: Uttalandet new Beta().go() körs i två faser. I första fasen Beta klasskonstruktor kallas. Det finns ingen instansmedlem närvarande i Beta klass. Så nu Beta klasskonstruktorn körs. Som Beta klass sträcker sig Alfa klass så samtalet går till Alfa klasskonstruktor som första sats som standard (Sätts av kompilatorn) är super() i Beta klass konstruktör. Nu som en instansvariabel( typ ) finns i Alfa klass så det ska få minne och nu Alfa klasskonstruktor exekveras och sedan anropar du tillbaka till Beta klasskonstruktör nästa uttalande. Så alfa beta är tryckt. I andra fasen gå() metod anropas på detta objekt. Eftersom det bara finns en variabel( typ ) i objektet vars värde är a . Så det kommer att ändras till b och tryckt två gånger. De super nyckelord här är till ingen nytta.   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  );      }   }   
Alternativ: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException kastas under körning. Svar: C) 4 Förklaring: append(String str) metodkonkatenera str till s1 . De delsträng (int index) metod returnerar strängen från det givna indexet till slutet. Men eftersom det inte finns någon String-variabel för att lagra den returnerade strängen så kommer den att förstöras. Nu indexOf(String s2) metod returnerar indexet för första förekomsten av s2 . Så 4 skrivs 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  ();      }   }   
Alternativ: A) Skriva... B) Skriva bok C) Skriva kod D) Kompileringen misslyckas Svar: B) Skrivbok Förklaring: Eftersom statiska metoder inte kan åsidosättas spelar det ingen roll vilket klassobjekt som skapas. Som a är en Författare refererad typ så alltid Författare klassmetoden kallas. Om vi ​​tar bort skriva() metod från Författare klass då Författare klassmetoden kallas som Författare klass sträcker sig Författare klass.