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

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

+13

  • Кто проходил: Mikhail
  • Дата прохождения: 04.04.2019
Какие интерфейсы расширяют интерфейс Collection.
Ваши ответы
Set
Queue
Что напечатает следующий код:
public class Test { 
   int i = 1; 
 
   void add(int i) { 
       i += i; 
       System.out.println(i); 
   } 
 
   public static void main(String args[]) { 
       Test t = new Test(); 
       t.add(5); 
   } 
} 
Ваши ответы
10
Объяснение:

Внутри метода add мы работаем только с параметром метода i, так как для обращения к переменной класса i (особенно в данном случае совпадения имен) необходимо употребить ключевое слово this.

Каким будет результат?
String s1 = "abc"; 
String s2 = new String("abc"); 
String s3 = "abc"; 
System.out.println(s1 == s2); 
System.out.println(s1 == s3); 
System.out.println(s1 == "abc"); 
Ваши ответы
false
true
true
Какие реализации java.util.Set сортируют элементы в их естественном порядке (или на основании Comparator'а)?
Ваши ответы
java.util.TreeSet
Объяснение:

TreeSet сортирует элементы (она реализует SortedSet). LinkedHashSet позволяет управлять порядком добавления элементов, но не сортирует их.

Зачем нужна аннотация @Override когда вы переопределяете (или реализовываете) методы?
Ваши ответы
Чтобы своевременно обнаружить изменение в сигнатуре метода у класса-предка (или интерфейса).
Объяснение:

Предопределённая аннотация @Override используется для выявления логических ошибок на этапе компиляции.
Этой аннотацией желательно помечать каждый метод, который будет перекрывать метод из суперкласса или реализовывать метод из интерфейса.
Если в суперклассе или интерфейсе нет метода с такой же сигнатурой, то возникнет ошибка компиляции. Это позволяет легко выявлять ситуации, когда в суперклассе или интерфейсе была удалена или изменена сигнатура перекрываемого метода.

Что произойдет при компиляции и исполнении кода:
 
public class GoTest { 
   public static void main(String[] args) { 
       Sente a = new Sente(); a.go(); 
       Goban b = new Goban(); b.go(); 
       Stone c = new Stone(); c.go(); 
   } 
}  
 
class Sente implements Go { 
   public void go() { System.out.println("go in Sente"); } 
}  
 
class Goban extends Sente { 
   public void go() { System.out.println("go in Goban"); } 
}  
 
class Stone extends Goban implements Go { } 
 
interface Go { public void go(); } 
Ваши ответы
go in Sente
go in Goban
go in Goban
Что будет выведено на консоль?
public class Main { 
   public static void main(String[] args) { 
       int a = 10; 
       int b = 100; 
       double c = (double) (a/b); 
       String str = String.format("%1.4f", c); 
       System.out.println(str); 
   } 
} 
Ваши ответы
0,0000
Объяснение:

В данном случае результат деления 2-ух целых чисел будет также округляться до целого, а затем приводиться к double (т. о. получаем 0). Чтобы на консоль вывелось 0,1000 необходимо изменить строку double c = (double) (a/b) на double c = (double) a/b.

Выберите варианты комментариев (в некотором исходном файле Java), которые не приведут к ошибке.
Ваши ответы
/* This is a valid comment in java. */
// This is a valid comment in java
/** This is a valid comment in java. */
/* This is a valid comment in java. **/
Какой результат выполнения данного кода:
System.out.println( 0.3 == 0.1d + 0.1d + 0.1d ); 
Ваши ответы
false
Объяснение:

Правильный ответ на этот вопрос связан со способом представления дробных чисел в памяти компьютера. Напомним, что они хранятся в двоичном коде.
Если попробовать перевести 0.1 в двоичную систему счисления, то получится БЕСКОНЕЧНАЯ двоичная дробь 0,000110011001100110011001100... Поскольку в памяти компьютера число представляется с помощью КОНЕЧНОГО количества двоичных разрядов (например, под значение типа double отводится 64 бита), то бесконечная двоичная дробь просто округляется. То число, которое получается в результате округления, будет чуть-чуть (на одну многомиллионную) отличаться от 0.1. Аналогично, двоичное представление для 0.3 будет чуть-чуть отличаться от 0.3.
Получается, что в примере сравниваются два числа, каждое из которых примерно равны 0.3, но они не равны между собой.
Если взять числа с другим двоичным представлением, будет другой результат. Например, System.out.println( 0.375 == 0.125d + 0.125d + 0.125d ) выводит true.

Рассмотрим следующий код:
import java.util.*; 
class MyDataStore { 
   public static void main(String [] args) { 
       // Вставьте код 
       structure.put("a", 420); 
       System.out.println(structure.get("a")); 
   } 
} 
 
Какие из приведённых вариантов можно вставить в строчку 4 (независимо друг от друга), чтобы класс успешно компилировался и выполнялся?
Ваши ответы
HashMap structure = new TreeMap();
Map structure = new TreeMap();
Что напечатает следующий код:
class A { 
 public A() { System.out.print("A"); } 
} 
class B { 
 public B() { System.out.print("B"); } 
} 
class C { 
 public C() { System.out.print("C"); } 
} 
public class D extends C {     
 private A objA = new A(); 
 private static B objB = new B();     
 
 public D() { System.out.print("D"); } 
 
 public static void main(String[] args){ 
   new D(); 
 } 
}
Ваши ответы
BACD
Объяснение:

Согласно JLS порядок инициализации объекта следующий: 1. Инициализация static полей во время загрузки класса 2. Инициализация суперкласса 3. Инициализация полей в порядке очередности перед вызовом любого конструктора класса 4. Конструктор класса

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

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

Какие из этих кусков кода не вызовут ошибок компиляции?
Ваши ответы
try { 
   System.out.println("Inside try-block"); 
} 
catch(IOException e) { }  
try { 
   System.out.println("Inside try-block"); 
} catch(Exception e) {} 
Объяснение:

Обработчик исключительной ситуации общего типа не должен предшествовать остальным, иначе исключение уже будет поймано и их код будет недостижим. Блоки try, catch и finally не могут разделяться никакими выражениями и пустой инструкцией ; в том числе. Если контролируемая исключительная ситуация не возбуждается нигде в блоке try, то и, следовательно, блок catch по контролируемой исключительной ситуации является недостижимым. Однако Exception, являющийся контролируемой исключительной ситуацией, в то же время является родителем неконтролируемой исключительной ситуации RuntimeException(и всех потомков этого класса). Компилятор считает, что неконтролируемая исключительная ситуация может возникнуть всегда, и, следовательно, обработчик по Exception является достижимым.

Что произойдет при выполнении такого кода:
import java.util.*; 
public class Test { 
   public static void main(String[] args) { 
       List a = new ArrayList<Double>();// 4 
       a.add("1.5");// 5 
       List<Double> b = new ArrayList();// 6 
       b.add("1.5");// 7 
       System.out.println(a + " " + b); 
   } 
}
Ваши ответы
Ошибка компиляции в 5-й строке
Объяснение:

Ошибка компиляции возникает в 7-ой строке, потому что в коллекцию "b" можно добавлять только элементы типа Double и производного от него, а в коллекцию "a" можно добавлять элементы любого типа, так параметризованный тип Double в ней повышается до Object.

Что выведет на экран следующий код?
public class Test { 
   private Integer k; 
   private int z; 
   private int i; 
 
   public void method() { 
       i = k + z;                 // 1 
   } 
 
   public static void main(String[] args) { 
       Test t = new Test(); 
       t.method(); 
       System.out.println(t.i); // 2 
   } 
} 
Ваши ответы
Произойдет ошибка компиляции в строке 1
Объяснение:

Переменные "i", "z" проинициализируются как 0, т.к. являются примитивными типами. А "k" является объектом поэтому будет проинициализирована как null, в итоге операции с null дадут ошибку выполнения NullPointerException.