logo

Резултат от Java програма | Комплект 7

Ниво на трудност: Средно ниво Предсказване на изхода на следните Java програми. Програма 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();  } } 
Опции: A) 20 B) 100 C) 1000 D) 2 Отговор: А) 20 Обяснение: Тук името на променливата на екземпляра на класа (num) е същото като изчисление () метод име на локална променлива (номер). Така че за рефериране на променлива на екземпляр на клас от изчисление () метод това използва се ключова дума. Така в изявлението this.num = num * 10 в а представлява локална променлива на метода, чиято стойност е 2 и този.номер представлява променлива на екземпляр на клас, чиято начална стойност е 100. Сега в printNum() метод, тъй като няма локална променлива, чието име е същото като променливата на екземпляра на класа, така че можем директно да използваме в а за препратка към променлива на екземпляр, въпреки че този.номер може да се използва.   Програма 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;  } } 
Опции: A) Резултатът е верен и MyStuff изпълнява договора Object.equals(). B) Резултатът е false и MyStuff изпълнява договора Object.equals(). C) Резултатът е верен и MyStuff НЕ изпълнява договора Object.equals(). D) Резултатът е false и MyStuff НЕ изпълнява договора Object.equals(). Отговор: C) Резултатът е верен и MyStuff НЕ изпълнява договора Object.equals(). Обяснение: като е равно (Object obj) метод в класа на обекти сравнява два обекта на базата на релация на еквивалентност. Но тук просто потвърждаваме, че обектът е нулев или не, така че не изпълнява Object.equals() договор. като m1 не е нула вярно ще се отпечата.   Програма 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();  } } 
Опции: A) алфа бета b b B) алфа бета a b C) бета алфа b b D) бета алфа a b Отговор: A) алфа бета b b Обяснение: Изявлението нова бета().go() изпълнява в две фази. В първа фаза Бета извиква се конструктор на клас. Няма присъстващ член на инстанция Бета клас. Така че сега Бета конструкторът на класа се изпълнява. като Бета класът се разширява Алфа клас, така че обаждането отива към Алфа конструктор на клас като първи оператор по подразбиране (поставен от компилатора) е супер() в Бета конструктор на класове. Сега като променлива на един екземпляр ( тип ) присъства в Алфа клас, така че ще получи памет и сега Алфа конструкторът на клас се изпълнява, след което се извиква return to Бета конструктор на класа next statement. И така алфа бета се отпечатва. Във втора фаза отивам() методът се извиква на този обект. Тъй като има само една променлива ( тип ) в обекта, чиято стойност е а . Така че ще бъде променен на b и отпечатано два пъти. The супер ключова дума тук няма полза.   Програма 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);  } } 
Опции: A) -1 B) 3 C) 4 D) A StringIndexOutOfBoundsException се хвърля по време на изпълнение. Отговор: В) 4 Обяснение: добавяне (низ str) метод свържете str към s1 . The подниз (int индекс) метод връща низа от дадения индекс до края. Но тъй като няма променлива String за съхраняване на върнатите низове, тя ще бъде унищожена. Сега indexOf(низ s2) метод връща индекса на първото появяване на s2 . Така че 4 се отпечатва като s1='JavaLove'.   Програма 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();  } } 
Опции: A) Писане... B) Книга за писане C) Писане на код D) Компилацията е неуспешна Отговор: Б) Книга за писане Обяснение: Тъй като статичните методи не могат да бъдат отменени, няма значение кой клас обект е създаден. като а е а Автор референтен тип така винаги Автор методът на класа се извиква. Ако премахнем пиши() метод от Автор клас тогава Писател методът на класа се нарича as Автор класът се разширява Писател клас.