Результаты прохождения теста Java основы пользователем Mikhail

Результат прохождения теста "Java основы" - Пройден

+86

  • Кто проходил: Mikhail
  • Дата прохождения: 15.04.2019
Что будет выведено на экран в результате работы данного кода?
public class Test { 
   public static void main(String[] s) { 
       A a = new B(); 
       a.b(); 
   } 
} 
 
class A { 
   void a() { 
       System.out.println("A-a"); 
   } 
 
   void b() { 
       System.out.println("A-b"); 
       a(); 
   } 
} 
 
class B extends A { 
   void a() { 
       System.out.println("B-a"); 
   } 
 
   void b() { 
       System.out.println("B-b"); 
       super.b(); 
   } 
} 
Ваши ответы
B-b
A-b
B-a
Объяснение:

В примере создаётся объект класса B, в котором переопределены методы a() и b(). Поэтому при обращении к этим методам будут вызываться их переопределённые варианты. Условно последовательность действий можно описать так:

Гарантированно ли начнется сборка мусора после вызова Runtime.getRuntime().gc()?
Ваши ответы
Нет
Объяснение:

В java сборкой мусора управляет виртуальная машина, а не пользователь. Вызов метода gc() - это лишь запрос на сборку мусора. Спецификация не регламентирует время сборки мусора и не гарантирует, начнется ли она вообще.

Что выведет следующий код?
int i = 0; 
i++; 
System.out.print(i); 
i = i++; 
System.out.println(i); 
Ваши ответы
11
Объяснение:

Результат выражения i++ при i=1 будет все равно 1, так как это постфиксный оператор.
После выполнения постфиксного оператора, значение i станет равным 2, но i пере запишется единицей в результате выполнения оператора присваивания i = i++

Что выведет следующий код?
public class Main { 
   public static void main(String[] args) { 
       recur(99); 
   } 
   public static void recur(int a) { 
       if (a <= 100) { 
           System.out.println("a=" + a); 
           recur(++a); 
           System.out.println("a=" + a); 
       } 
   } 
} 
 
Ваши ответы
a=99
a=100
a=101
a=100
Объяснение:

Сначала выдаст значение а = 99,а после префиксного инкремента
выполнится снова метод recur с параметром 100, который выведет а=100, следующий recur будет вызван с параметром 101, но условие выполняться не будет, так как передаваемый параметр больше 100, и будет выведено на экран значение параметра а=101, закончится выполнение этого метода, и программа возвратится к предыдущему выполнению этого метода, и выдаст значение а=100, таким, каким бы выдало его, если бы метод recur и вовсе не вызывался сам в себе, а просто переменная а увеличилась бы на 1.

Что выведет программа:
package tutorial.base; 
 
public class TypesTutorial { 
 
   public static void main(String... atgs) { 
       A alpha = new B(); 
   } 
} 
 
class A { 
   A(){ 
       System.out.print("A"); 
       a(); 
   } 
 
   void a() { 
       System.out.print("a"); 
   } 
} 
 
class B extends A { 
   B() { 
       System.out.print("B"); 
       a(); 
   } 
 
   void a() { 
       System.out.print("b"); 
   } 
} 
Ваши ответы
AbBb
Объяснение:

Первым вызывается конструктор класса-родителя A, в нем вызывается переопределенный метод класса-потомка B, по типу созданного обьекта. Далее вызывается конструктор класса-потомка B, который вызывает тот же метод.

Каким будет результат выполнения программы?
public class Tenor extends Singer { 
   public static String sing() { return "fa"; } 
   public static void main(String[] args) { 
       Tenor t = new Tenor(); 
       Singer s = new Tenor(); 
       System.out.println(t.sing() + " " + s.sing()); 
   } 
} 
class Singer { public static String sing() { return "la"; } } 
Ваши ответы
fa la
Объяснение:

Полиморфизм не применяется к статическим методам

Что выведет в консоль следующий код?
import java.util.List; 
import java.util.concurrent.CopyOnWriteArrayList; 
 
public class Test { 
 
   private static void removeAndPrint(List<String> list) { 
       for (String str : list) { 
           if (str.equals("two")) { 
               list.remove("three"); 
           } 
       } 
       System.out.println(list); 
   } 
 
   public static void main(String[] args) { 
       List<String> list = new CopyOnWriteArrayList<String>(); 
 
       list.add("one"); 
       list.add("two"); 
       list.add("three"); 
       list.add("four"); 
 
       removeAndPrint(list); 
 
   } 
} 
Ваши ответы
[one, two, four]
Объяснение:

CopyOnWriteArrayList - это разновидность List нормально переносит вызов метода remove() при перемещении по списку, не выдавая исключения ConcurrentModificationException.

Какой будет результат компиляции и выполнения нижеприведенного кода?
1. public static void main(String[] args) { 
2.     for (int i = 0; i <= 10 ; i++) { 
3.         if (i > 6) break; 
4.     } 
5.     System.out.println(i); 
6. } 
Ваши ответы
Ошибка компиляции
Объяснение:

Переменнная "i"
существует только в пределах цикла.
В строке 5 она уже за пределами видимости.

Что будет выведено на экран?
class ClassA { 
   int x = 1; 
 
   public void printX() { 
       System.out.println(getX()); 
   } 
 
   public int getX() { 
       return x; 
   } 
} 
 
class ClassB extends ClassA { 
   int x = 2; 
 
   public int getX() { 
       return x + 1; 
   } 
} 
 
public class Test { 
   public static void main(String[] args) { 
       ClassA a = new ClassB(); 
       System.out.println(a.x); 
   } 
} 
Ваши ответы
1
Объяснение:

Правильный ответ 1. Поскольку тип переменной является класс ClassA, то переменные этого класса перекрывают переменные класса ClassB при вызове этой переменной через ссылку с типом ClassA

Что будет выведено на экран, если скомпилировать и запустить следующий код:
public class Main { 
   public static void main(String s[]) { 
       int anar[] = new int[5]; 
       System.out.println(anar[0]); 
   } 
} 
Ваши ответы
0
Каким будет результат компиляции и выполнения данного кода?
public class Sentence { 
   public static void main(String[] args) { 
       String str1 = "Zero"; 
       String str2 = "Zero"; 
 
       boolean b1; 
 
       if (str1 == str2) 
           b1 = true; 
       else 
           b1 = false; 
       System.out.println(b1); 
 
       String str3 = "Zero"; 
       String str4 = "Zero1"; 
 
       boolean b2; 
 
       if (str3 == str4) 
           b2 = true; 
       else 
           b2 = false; 
       System.out.println(b2); 
   } 
} 
Ваши ответы
true
false
Объяснение:

Объекты классов должны создаваться явно. В представленном вопросе, обьекты создаются неявно: String str1 = "Zero"; String str2 = "Zero"; приводит к присвоению второй ссылочной переменной, адреса, сохраненного в первой ссылочной переменной, из-за оптимизации кода компилятором. При вышеприведенном способе инициализации переменной, объект создается только один раз. Если есть другая переменная, с тем же способом присвоения и таким же набором символов(т.е. - "Zero"), строка будет использоваться совместно. А это значит, что str1==str2 = true(ссылка на одну и ту же область памяти). Однако, равенство обьектов подобным образом обычно не проверется. Содержимое объектов обычно проверяется с помощью метода equals()(например, str1.equals(str2)), который с этой целью переопределяется.

Какие из следующих строк скомпилируются без ошибок?
Ваши ответы
String[ ] names[ ];
float[ ] f1[ ], f2;
Какой будет результат компиляции и выполнения данного кода:
class A { 
   private static void test1() {  
       System.out.println("A.test1"); 
   }  
 
   static void test2() { 
       test1(); 
   }  
}  
 
public class B extends A {  
   void test1() { 
       System.out.println("B.test1"); 
   }  
   static void test2() { 
       super.test2(); 
   }  
   public static void main(String[] args) {  
       A a = new B(); a.test2();  
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Нельзя использовать ключевое слово super в static методах.

Как нужно изменить место с меткой //1, чтобы код компилировался?
public class Test { 
   public static void main(String s[]) { 
       int i = getX(); 
   } 
   private int getX() { //1 
       return 10; 
   } 
} 
Ваши ответы
public static int getX() {
Скомпилируется ли данный код? Если да, что будет являться результатом его выполнения?
public class Autoboxing { 
   public static void main(String[] args) { 
       Integer oInt1 = null; 
       Integer oInt2 = 0; 
       final int int1 = oInt1; 
       final int int2 = oInt2; 
       System.out.println(int1 == int2); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Возникнет java.lang.NullPointerException в 5-й строке, поскольку компилятор преобразует выражение