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

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

+126

  • Кто проходил: Андрей1
  • Дата прохождения: 29.11.2018
Каким будет результат компиляции и выполнения следующей программы?
public class Test { 
   public static void main(String[] args) { 
       byte a = 3; 
       short b = 4; 
       compute(a, b); 
   } 
 
   public static void compute(short x, short y) { 
       System.out.println("Short: " + (x + y) + (x + y)); 
   } 
} 
Ваши ответы
Short: 77
Объяснение:

"Short: " + (x + y) + (x + y) состоит из двух опреаторов +, которые левоассоциативны, то есть выражение эквивалентно (("Short: " + (x + y)) + (x + y)). Когда одним из аргументов + является строка, JVM выполняет конкатенацию строк. См. JLS 15.18.1

Какого типа вложенных классов не существует (укажите все подходящие варианты)?
Ваши ответы
соседний класс
глобальный вложенный класс
Какие из приведенных выражений будут истинными при выполнении кода:
String a = new String("hello"); 
String b = new String(a); 
String c = a; 
char[] d = { 'h', 'e', 'l', 'l', 'o' }; 
Ваши ответы
(a == c)
Каким будет результат?
public class Main { 
   public static void main(String[] args) { 
       byte b = 12; 
       byte k = b + 1; 
       System.out.println(k); 
   } 
} 
Ваши ответы
Код не откомпилируется
Объяснение:

При выполнении арифметических действий со значениями типа byte, char, short, они неявно приводятся к типу int. Поэтому результат выражения b+1 также будет иметь тип int. Чтобы его можно было присвоить переменной k, нужно использовать явное приведение типа:
byte k = (byte)(b + 1);

Какие из следующих методов выбрасывают исключение InterruptedException?
Ваши ответы
sleep
Что произойдет при попытке скомпилировать и запустить данный код:
public class QTest { 
   { 
       System.out.print("1"); 
   } 
 
   public static void main(String[] args) { 
       System.out.print("2"); 
       new QTest(); 
   } 
 
   static { 
       System.out.print("3"); 
   } 
} 
Ваши ответы
На консоль выведется "321"
Объяснение:

Статические блоки инициализации выполняются до вызова метода main и до создания первого экземпляра класса, в котором они объявлены. Нестатические блоки инициализации выполняются в
момент создания экземпляра класса. Поэтому в данном примере сначала выполнится "System.out.print("3");", затем начнёт работу метод main - выполнится "System.out.print("2");", и наконец, при инстанцировании экземпляра класса QTest выполниться "System.out.print("1");".
Правильный ответ - "На консоль выведется 321".

Определена следующая переменная строкового типа.
String s = "abc"; 
 
Какие из перечисленных ниже операций допустимы?
Ваши ответы
s += s + s; 
Объяснение:

Строковое преобразование (String conversion) в языке Java осуществляется неявно и только в одном случае: при конкатенации (склеивании) строки и не-строки.
Например, допустимой будет такая конструкция:
s = "" + (46 >> 2); // пустая строка + число
В этом случае число будет неявно преобразовано в строку.

Каким будет результат компиляции и запуска данного кода:
class Super { 
   Super() { 
       System.out.println("Super contructor"); 
   } 
} 
 
public class Main extends Super { 
   Main() { 
       this(1); 
       System.out.println("Main() contructor"); 
   } 
   Main(int i) { 
       System.out.println("Main(int) contructor"); 
   } 
   public static void main(String [] args) { 
       new Main();   
   } 
} 
Ваши ответы
Super contructor
Main(int) contructor
Main() contructor
В результате каких команд на консоль будет выведено число "10" и слово "десять" (порядок их вывода значения не имеет, т. е. в данном вопросе не важно "10 десять" или "десять 10")
Ваши ответы
System.out.println(5 + 5 + " десять");
System.out.println("десять " + (5 + 5));
Объяснение:

В данном случае такой результат благодаря приоритетам операций. Т. е. если сначала число складывается со строкой, а затем полученная строка складывается со вторым числом, то результирующая строка
содержит два исходных числа и исходную строку.
Если же сначала числа складываются между собой, а потом со строкой, то результирующая строка представляет собой сумму этих чисел и исходную строку.

В каком порядке должны размещаться следующие операторы?
Ваши ответы
1. Package statement
2. Imports
3. Class or interface definitions
Что будет напечатано в результате выполнения следующего кода:
public class Exceptions { 
   public static void main(String[] args) { 
       try { 
           throw new UnsupportedOperationException(); 
       } catch(Throwable t) { 
           System.out.print("1"); 
       } catch(Exception e) { 
           System.out.print("2"); 
       } catch(UnsupportedOperationException uoe) { 
           System.out.print("3"); 
       } 
   } 
} 
Ваши ответы
Код не скомпилируется
Объяснение:

Код не скомпилируется. Все исключения в java наследуются от Throwable. В нескольких блоках catch обработка исключений должна идти вверх по иерархии исключений (в данном случае от более конкретного - UnsupportedOperationException до более общего - Throwable, но не наоборот).

Что произойдет в результате компиляции и выполнения программы:
class Aaaa { 
   private Double x = 2; 
   public static void multX(Aaaa a, Double n) { 
       a.setX(a.getX()*n); 
   } 
   public Double getX() { return x; } 
   public void setX(Double xn) { x = xn; } 
   public static void trippleValue(Double x) { 
       x*=3; 
   } 
   public static Aaaa resetX(Aaaa a) { 
       a = new Aaaa(); 
       return a; 
   } 
   public static void main(String[] args) { 
       Double x = 4; 
       trippleValue(x); 
       Aaaa anA = new Aaaa(); 
       multX(anA,x); 
       resetX(anA); 
       System.out.print(anA.getX()); 
   }  
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Ошибка компиляции при инициализации поля х и локальной переменной х: нельзя преобразовать int в Double.

Какая структура данных, реализующая интерфейс Map использует для сравнения объектов оператор ==, а не метод equals.
Ваши ответы
IdentityHashMap
Объяснение:

В SDK 1.4 добавлен класс IdentityHashMap, в котором хэш-коды ключей подсчитываются не методом hashCode, а методом System.identityHashCode. Этот метод используется в Object.hashCode для вычисления хэш-кода по адресу объекта в памяти. Кроме того, для сравнения объектов класс IdentityHashCode применяет оператор ==, а не метод equals.

Что будет выведено следующей программой?
public class Main { 
 { 
   System.out.print("1 "); 
 } 
 
 Main(){ 
   System.out.print("2 "); 
 } 
 
 public static void main(String[] args) { 
   System.out.print("3 "); 
   Main m = new Main(); 
   System.out.print("4 "); 
 } 
 
 static { 
   System.out.print("5 "); 
 } 
} 
Ваши ответы
5 3 2 1 4
Объяснение:

Первым инициализируется статический блок, далее управление передается main, вызывается конструктор и доинициализирует класс, вызывается функция внутри конструктора, окончание работы.

Что будет выведено на экран?
public class TestMethods{ 
   public static void main(String[] args){ 
       TestMethods test = new TestMethods(); 
       Thread anotherThread = new Thread("Thread#2"){ 
           public void run(){ 
               staticMethod(); 
           } 
       }; 
       anotherThread.start(); 
       test.instanceMethod(); 
   } 
 
   public static synchronized void staticMethod(){ 
       System.out.println("Running static method"); 
       try{ 
           Thread.sleep(1000); 
       } catch (InterruptedException e){ 
           System.out.println(Thread.currentThread().getName() + " interrupted!"); 
       } 
       System.out.println("Exiting static method"); 
   } 
 
   public synchronized void instanceMethod(){ 
       System.out.println("Running instance method"); 
       try{ 
           Thread.sleep(1000); 
       } catch (InterruptedException e){ 
           System.out.println(Thread.currentThread().getName() + " interrupted!"); 
       } 
       System.out.println("Exiting instance method"); 
   } 
} 
Ваши ответы
Running static method 
Running instance method 
Exiting static method 
Exiting instance method 
Объяснение:

Вызов синхронизированных статических методов и не статических будет происходить параллельно, т.к. объекты синхронизации для них разные (для не статического - это объект test, а для статического - Test.class)