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

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

+81

  • Кто проходил: Nick1980
  • Дата прохождения: 07.05.2019
Каким будет результат компиляции и выполнения следующей программы?
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

Как определить длину массива myarray?
Ваши ответы
myarray.length
Объяснение:

Для определения длины строки используют myarray.length();
Для определения длины массива используют myarray.length;

Какой результат выполнения этой программы ?
import java.util.ArrayList; 
public class Test { 
   public static void main(String[] args) { 
       ArrayList<Integer> array = new ArrayList<Integer>(2); 
       array.add(5); 
       array.add(6); 
       array.add(1, 7); 
       System.out.print(array.indexOf(6)); 
 
       array.remove(1); 
       System.out.println(array.indexOf(6)); 
   } 
}
Ваши ответы
21
Объяснение:

ArrayList array = new ArrayList(2);
в данном случае двойка означает размер конейнера, т.е. всего зарезервировано место под два элемента. В действительности, размер контейнера равен нулю, т.к. в нём пока нет элементов. Это к справке.
Далее:
array.add(5);
array.add(6);
как мы знаем, ArrayList это списочный последовательный контейнер и элементы в нём хранятся в порядке добавления. Т.е.
нулевой элемент - пятёрка
первый элемент - шестерка.
такая форма добавления:
array.add(1, 7);
означает, цифру семь нужно вставить в первый элемент, т.к. этот контейнер последовательный и порядок добавления в него слева направо, то при добавлении элемента, цифра шесть сместиться вправо и станет вторым элементом в контейнере
0 1 2 - элементы в контейнере.
5 7 6 - числа
Далее, array.indexOf(6)
печатаем индекс числа шесть, он равен двойке.
Затем, array.remove(1);
удаляется первый элемент, т.е. семёрка и, шестёрка становится на своё

Какой будет результат выполнения данного кода?
public class Main { 
  static int method() { 
   for (int i = 0; i < 5; i++) { 
     System.out.println("i = " + i); 
     try { 
       if (i == 1) { 
         throw new Exception(); 
       } 
     } catch (Exception e) { 
       System.out.println("Exception!"); 
       return i; 
     } finally { 
       System.out.println("Finally block"); 
     } 
   } 
   return -1; 
 } 
 public static void main(String[] args) { 
   System.out.println("method() returned " + method()); 
 } 
} 
Ваши ответы
i = 0
Finally block
i = 1
Exception!
Finally block
method() returned 1
Что напечатает следущий код?
public class Test { 
   public static boolean methodOne() { 
       System.out.println("methodOne "); 
       return false; 
   } 
 
   public static boolean methodTwo() { 
       System.out.println("methodTwo "); 
       return true; 
   } 
 
   public static boolean methodThree() { 
       System.out.println("methodThree "); 
       return true; 
   } 
 
   public static void main(String[] args){ 
       System.out.println(Test.methodOne() || Test.methodTwo() || Test.methodThree()); 
   } 
}
Ваши ответы
methodOne
methodTwo
true
Объяснение:

Феномен "ускоренного вычисления" при работе с логическими выражениями. methodThree не будет вызван, т.к. результат уже не зависит от него.
Строки "methodOne" и "methodTwo" выводятся при вычислении значения выражения, затем выводится само значение выражения - true.

Какой результат работы программы?
public class Test { 
   public static void main(String[] args) { 
       Integer i1 = 1000; 
       Integer i2 = 1000; 
       System.out.println(i1 == i2); 
       System.out.println(i1 == 1000); 
   } 
} 
Ваши ответы
false
true
Какой результат попытки компиляции и запуска программы:
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 компилятор не может выбрать наиболее узкий и генерирует ошибку компиляции.

Назовите дизассемблер Java, который входит в стандартную поставку JDK.
Ваши ответы
javap
Что произойдет при попытке скомпилировать и запустить данный код? Считается, что файл outstream уже создан.
import java.io.*; 
 
public class Main { 
   public static void main(String[] args) { 
       try { 
           FileInputStream fis = new FileInputStream("outstream"); 
           InputStreamReader isr = new InputStreamReader(fis); 
           BufferedReader br = new BufferedReader(isr); 
           try { 
               do { 
                   String str = br.readLine(); 
                   System.out.println(str); 
               } while (str != null);              
           } 
           finally { 
               fis.close(); 
               isr.close(); 
               br.close(); 
           } 
       } catch(IOException e){ 
           e.printStackTrace(); 
       } 
   } 
} 
Ваши ответы
Произойдет ошибка компиляции
Объяснение:

Ошибка компиляции произойдёт из-за того, что переменная str объявлена внутри цикла do.. while().
Объявлять переменные в цикле, конечно же, разрешается. Только и использоваться они должны внутри тела цикла. А в этом примере переменная str используется за пределами блока, в котором она была объявлена - в условии продолжения цикла.

В каких строчках будет ошибка компиляции?
public class Test { 
   public static void main(String[] args) { 
       char c = (char) 1; // 1 
       boolean boo = (boolean) 1; // 2 
       byte b = (byte) true;    // 3 
   } 
} 
Ваши ответы
в строке с комментарием //2
Являются ли массивы в Java однородными?
Ваши ответы
Да. Всегда и полностью.
Объяснение:

Массивы в Java однородные, то есть все элементы в массиве должны быть одного типа, за исключением случаев, разрешённых полиморфизмом. Иными словами, когда вы создаёте массив, вы должны определить тип элементов, которые могут в нём содержаться. Если тип не примитивный, а определённый через класс, то реальный массив, помимо объектов заданного класса, может содержать также объекты подклассов того класса, который был указан в объявлении массива. http://javapd.blogspot.com/

Что такое JRE?
Ваши ответы
JRE - это набор основных библиотечных классов и файлов необходимых для запуска Java-приложений.
Объяснение:

JRE (java runtime environment) - это часть JDK (java development kit) необходимая для запуска java-приложений. JRE включает в себя JVM, библиотечные классы и исполняемые файлы, специфичные для конкретной ОС

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

Инициализация полей происходит до вызова конструктора, а статических полей - при загрузке класса в память

Какой будет результат компиляции и выполнения данного кода:
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();  
   } 
} 
Ваши ответы
A.test1
Объяснение:

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

Какой результат выполнения данного кода:
String data[]; 
data = {"one", "two", "three"}; 
System.out.println(data[1]); 
Ваши ответы
two
Объяснение:

Список инициализации разрешается использовать или при объявлении массива: String data[] = {"one", "two", "three"}; или при создании массива с помощью оператора new: data = new String[] {"one", "two", "three"};