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

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

+86

  • Кто проходил: Mikhail
  • Дата прохождения: 15.04.2019
Какие интерфейсы предоставляют возможность хранить объекты в виде пары "ключ-значение"?
Ваши ответы
java.util.SortedMap
java.util.Map
Каков будет результат выполнения метода main у класса Main?
public class Main { 
   private int anInt = 4; 
 
   public Main() { 
       anInt = 5; 
   } 
 
   public static void main(String[] args) { 
       Main m = new Main(); 
       int anInt = 6; 
       m.print(anInt); 
   } 
 
   public void print(int anInt){ 
       System.out.println(anInt); 
   } 
} 
Ваши ответы
6
Объяснение:

Параметр метода print перекроет область видимости поля класса.

Что будет выведено на консоль при выполнении данного кода?
public class Test { 
   public static void main(String[] args) { 
       String s = new String("ssssss"); 
       StringBuffer sb = new StringBuffer("bbbbbb"); 
       s.concat("-aaa"); 
       sb.append("-aaa"); 
       System.out.println(s); 
       System.out.println(sb); 
   } 
} 
Ваши ответы
ssssss
bbbbbb-aaa
Объяснение:

s.concat() не изменит значения s, так как String это "immutable"(неизменяемый) объект, в отличии от StringBuffer, который реализует изменяемые строки

Что произойдет после выполнения данного кода?
class Test { 
   public static void main( String[] args ) { 
       List list = new ArrayList( 3 ); //1 
 
       list.add( new Integer( 100 ) ); 
       list.add( new Integer( 200 ) ); 
       list.add( new Integer( 300 ) ); 
       list.add( new Integer( 400 ) ); //2 
 
       System.out.println( list.size() ); //3 
   } 
} 
Ваши ответы
Компиляция пройдет успешно и будет напечатано 4
Объяснение:

Мы заведомо определяем размерность списка, которая равна 3. Но в случае выхода за границу, размерность будет динамически расширена. Компиляция пройдет успешно и будет напечатано 4.

Что будет напечатано в результате выполнения следующей программы?
public class Test { 
   public static void main(String[] args) { 
       int i = 1; 
       add(i++); 
       System.out.println(i); 
   } 
 
   static void add(int i) { 
       i += 2; 
   } 
} 
Ваши ответы
2
Объяснение:

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

После выполнения какой строки только один объект будет доступен для сборки мусора (Garbage Collection)?
01. public class Test { 
02.      Test ags = null; 
03.      public static void main(String argv[]) { 
04.           Test a1 = new Test(); 
05.           Test a2 = new Test(); 
06.           Test a3 = new Test(); 
07.           a1.ags = new Test(); 
08.           a2.ags = a1.ags; 
09.           a3.ags = a2.ags; 
10.           a1 = null; 
11.           a2 = null; 
12.           a3 = null; 
13.      } 
14. } 
Ваши ответы
10
Объяснение:

После 9-ой строки: a1.ags, a2.ags, a3.ags указывают на объект созданный в строке 7.
В 10-ой строке ссылке a1 присваивается значение null. Теперь на объект, созданный в строке 4, нет ссылок. То есть он становится доступным для сборщика. Его поле ags в расчет не берется, так как объект, на который оно указывает, будет доступен посредством ссылок a2.ags, a3.ags

Что произойдет в результате выполнения следующего кода?
class A {} 
class B extends A {} 
 
public class Test {  
   static public  void main(String args[]) { 
       B b = new B(); 
       A a = b; 
       if (a.hashCode() == b.hashCode()) 
           System.out.print("Passed"); 
   } 
} 
Ваши ответы
В консоль выведется строка "Passed"
Объяснение:

Ссылки a и b указывают на один и тот же объект, поэтому в консоль выведется строка "Passed". Экземпляру класса A можно присвоить экземпляр класса B в силу полиморфизма.

Какой результат выполнения программы:
public class Abc { 
   public static void main(String[] args) { 
   p1: 
       { 
       p2:    
           { 
           p3: 
               { 
                   System.out.print("p3.1 "); 
                   if (true) break p2; 
                   System.out.print("p3.2 "); 
               } 
               System.out.print("p2 "); 
           } 
           System.out.print("p1 "); 
       } 
   } 
}
Ваши ответы
p3.1 p1
Объяснение:

Идентифицировать можно не только циклы, условия и т.п., а обычный блок кода. Программа сначала выдаст строку p3.1, затем выполнится условие - произойдет переход за блок кода с меткой p2 и выдаст p1.

Какой результат попытки компиляции и запуска программы:
public class MainClass { 
   public static void test(int ...a) { 
       System.out.println("int..."); 
   } 
 
   public static void test(Integer ...a) { 
       System.out.println("Integer..."); 
   } 
 
   public static void test(Number ...a) { 
       System.out.println("Number..."); 
   } 
 
   public static void test(Object ...a) { 
       System.out.println("Object..."); 
   } 
 
   public static void main(String args[]){ 
       Number n = new Integer(1); 
       test(n.intValue()); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Очевидно, что каждый из четырёх методов является потеницально применимым для вызова test(int).
Задача компилятора в этом случае - выбрать наиболее специализированный метод.
В случае методов с переменным количеством аргументов компилятор рассматривает, как соотносятся базовые типы и выбирает из них наиболее узкий, при этом тип фактического параметра не учитывается
Так, из типов Integer, Number, Object наиболее узким будет Integer. Но примитивные типы не являются подтипами ссылочных типов, поэтому из типов int и Integer компилятор не может выбрать наиболее узкий и генерирует ошибку компиляции.

Что выведет на экран System.out.print при выполнении фрагмента кода?
int x = 12; 
while (x < 10) { 
   x--; 
} 
System.out.print(x); 
Ваши ответы
12
Объяснение:

Так как условие цикла не действительно, значение "x" не изменится.

Является ли пустой файл разрешенным для компиляции файлом исходного кода?
Ваши ответы
Да
Что будет напечатано следующим кодом?
public class Main { 
   public static void var(Integer x, int y) { 
       System.out.println("Integer int"); 
   } 
 
   public static void var(Object... x) { 
       System.out.println("Object"); 
   } 
 
   public static void var(int... x) { 
       System.out.println("int... x"); 
   } 
 
   public static void var(Integer... x) { 
       System.out.println("Integer..."); 
   } 
 
   public static void main(String... args) {  
       int i = 0; 
       Integer i2 = 127; 
       var(i, i2); 
   } 
} 
Ваши ответы
Integer int
Объяснение:

При вызове перегруженных (overloaded) методов компилятор:
1) сначала ищет метод, типы параметров которого в точности совпадают с аргументами;
если такого метода не нашлось, то
2) затем ищет метод с параметрами, которые могут быть получены с помощью допустимых при вызове преобразований (widening, boxing+widening, unboxing+widening);
если и такого метода не нашлось, то
3) затем анализируются методы с переменным количеством аргументов.
В данном примере компилятор останавливается на втором шаге (срабатывают преобразования int→Integer, Integer→int).

Что произойдет в результате компиляции и выполнения кода:
01: interface TheInterface { 
02:    void print(); 
03: } 
04:  
05: class TheClass implements TheInterface { 
06:    public void print() { 
07:       System.out.println("TheClass"); 
08:    } 
09: } 
10:  
11: public class ClassConversion { 
12:    public static void main(String[] args) { 
13:       TheClass c = new TheClass(); 
14:       TheInterface i = c; 
15:       i.print(); 
16:    } 
17: } 
Ваши ответы
Будет напечатано TheClass
Что выведется в консоль?
public class D { 
   public static void main(String[] args) { 
       E e = new E(); 
       e.someVariable = 100; 
       e.doIt(e); 
       System.out.println(e.someVariable); 
   } 
} 
 
class E { 
   public int someVariable = 10; 
 
   public void doIt(E aE) { 
       aE.someVariable++; 
   } 
 
   E() { 
   } 
} 
Ваши ответы
101
Какой результат выполнения данного кода:
System.out.println(Math.sqrt(-2.0)); 
System.out.println(1.0/0.0); 
Ваши ответы
NaN
NaN