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

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

+77

  • Кто проходил: MartinK
  • Дата прохождения: 16.05.2019
Каким будет результат компиляции и выполнения данного кода?
01. class A { 
02.     public void process() { System.out.print("A,"); } 
03. } 
04. public class B extends A { 
05.     public void process() throws IOException { 
06.         super.process(); 
07.         System.out.print("B,"); 
08.         throw new IOException(); 
09.     } 
10.  
11.     public static void main(String[] args) { 
12.         try { new B().process(); } 
13.         catch (IOException e) { System.out.println("Exception"); } 
14.     } 
15. } 
Ваши ответы
Ошибка компиляции в строке 5
Объяснение:

При переопределении метода нельзя добавлять проверяемое (checked) исключение.

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

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

Что выведет на консоль?
try { 
   int a = 0; 
   int b = 42/a; 
   System.out.print("A"); 
} catch (Exception e) { 
   System.out.print("C"); 
} catch (ArithmeticException e) { 
   System.out.print("B"); 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Подкласс должен следовать раньше своего суперкласса в серии catch-операторов. Если это не так, то будет создан недостижимый код
и будет ошибка компиляции.

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

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

Что будет результатом компиляции кода:
class Quest3 { 
   public static void main(String s[ ]) { 
       String args; 
       System.out.print(args + s); 
   }  
}  
Ваши ответы
Ошибка компиляции: переменная args используется до инициализации
Объяснение:

Если переменная объявлена в методе, то до своего использования она должна быть проинициализирована, иначе компилятор сообщает об ошибке.
При инициализированном значении переменной args в методе print() ошибка не возникает, так как оператор сложения инициирует действия по преобразованию в строку всех участвующих в конкатенации объектов.
Параметр String[] args в main() – просто соглашение, и может быть использован любой приемлемый идентификатор для массива строк.

Каким будет результат выполнения данного кода ?
public class Main { 
   public static void main(String[] args) { 
       try { 
           String value = "29.1"; 
           System.out.println((Float.valueOf(value) + 1.0) == 30.1); 
           System.out.println((Double.valueOf(value) + 1.0) == 30.1); 
           System.out.println(Float.valueOf(value)/0); 
           System.out.println(Double.valueOf(value)/0); 
       } 
       catch (NumberFormatException ex) { 
           System.out.println("NumberFormatException"); 
       } 
       catch (ArithmeticException ex) { 
           System.out.println("ArithmeticException"); 
       } 
   } 
} 
Ваши ответы
false
true
Infinity
Infinity
Объяснение:

1: Float.valueOf(value) дает 29.1f. Далее 29.1f приводится к double т.к. 1.0 имеет тип double (по-умолчанию все литералы с плавающей точкой имеют тип double). Получаем 29.100000381469727d. Соответственно (Float.valueOf(value) + 1.0)=30.100000381469727d. И в результате (Float.valueOf(value) + 1.0) == 30.1 равно false.
2: Аналогично п.1 только без приведения float к double, все переменные типа double. (Double.valueOf(value) + 1.0) дает 30.1d. И в результате (Double.valueOf(value) + 1.0) == 30.1 равно true.
3: Деление float на ноль не дает ArithmeticException (только деление целого типа на ноль даст ArithmeticException), для таких случаев в классе Float даже определена константа:
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
Причем если заглянуть в исходники метода java.io.PrintStream#println(float), то становится ясно что float превращается в строку с помощью метода String.valueOf(float), который POSITIVE_INFINITY преобразует в "Infinity".
4: Аналогично п.3.

Какой будет результат компиляции и выполнения данного кода?
public class Test1 { 
   public static void main(String[] args) { 
       int i = 1; 
       i <<= 1; 
       float f = 1; 
       f = f << 1; 
       System.out.println( i + ", " + f); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

operator << cannot be applied to float,int

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

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

Что произойдет при компиляции и запуске данного кода?
abstract public class Parent { 
   String s = "hello!"; 
   public void test() { 
       System.out.println(s); 
   } 
} 
 
class P { 
   public static void main(String[] args) { 
       Parent p = new Parent(); 
       p.test(); 
   } 
} 
Ваши ответы
Возникнет ошибка компиляции
Объяснение:

Нельзя создавать экземпляры абстрактного класса используя оператор new, так как он не определен полностью

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

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

Какой результат будет получен при компиляции и выполнении данного кода:
public class Main{ 
   final int x = 1; 
 
   public static void main(String [] str) { 
       int x = 2;                            //1 
       for (x = 3 ; x < 5 ; x++);            //2 
       System.out.println("x=" + x); 
 
   }     
} 
Ваши ответы
x=1
x=2
x=5
Ошибка компиляции в строке 1
Ошибка компиляции в строке 2
Ошибка времени выполнения
Допустима ли такая реализация интерфейсов?
interface I1 {}; 
interface I2 extends I1{}; 
 
public class C implements I2, I1{} 
Ваши ответы
Нет
Объяснение:

Спецификация запрещает явно указывать два одинаковых интерфейса в списке extends. Однако, не запрещено использовать один и тот же интерфейс различными способами, например, напрямую и через супер-интерфейс. См. спецификацию

Что нужно вставить вместо ... чтобы прочитать строку "Reading successful." из файла C:\file.txt и вывести её на экран (укажите все подходящие варианты)?
public class Main { 
   public static void main(String[] args) { 
       File file = new File("C:\\file.txt"); 
       try { 
           ... 
           int i; 
           while((i = input.read()) != -1){ 
               System.out.print((char)i); 
           } 
       } 
       catch (Exception ex) { 
           System.out.println("Exception"); 
       } 
   } 
} 
Ваши ответы
BufferedReader input = new BufferedReader(new FileReader(file));
FileInputStream input = new FileInputStream(file);
Каково будет значение переменной count после выполнения данного кода?
int count = 1, i = 0; 
do { 
   count *= ++i; 
   if (count > 5) break; 
} while (i <= 4); 
Ваши ответы
10
4
1
5
6
Что произойдет в результате компиляции и выполнения программы:
class Aaa { 
   private double x = 2; 
   public static void multX(Aaa 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 Aaa resetX(Aaa a){ 
       a = new Aaa(); 
       return a; 
   } 
    public static void main(String[] args) { 
         int x = 3; 
         trippleValue(x); 
         Aaa anA = new Aaa(); 
         multX(anA,x); 
         resetX(anA); 
         x=0; 
         System.out.print(anA.getX());         
   }  
}  
Ваши ответы
Ошибка компиляции
Программа выведет на экран "18.0" без кавычек
Программа выведет на экран "9.0" без кавычек
Программа выведет на экран "6.0" без кавычек
Программа выведет на экран "3.0" без кавычек
Программа выведет на экран "2.0" без кавычек
Ничего из вышеперечисленного
Объяснение:

При вызове trippleValue(x) значение x не меняется, т.к. это переменная простого типа, которая передается по значению. При вызове resetX(anA) объект, на который ссылается anA не меняется, т.к. anA - это ссылка на объект, которая передается по значению.