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

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

+10

  • Кто проходил: Андрей1
  • Дата прохождения: 01.02.2019
Что будет напечатано на экран следующим кодом:
class Main { 
   public static void main(String[] args) { 
       int i = 0; 
       System.out.println(++i == i++); 
       System.out.println(i++ == i++); 
   } 
} 
Ваши ответы
true
false
Что выведет программа в консоль?
public class Test { 
   public static void main(String[] args) { 
       boolean b = true; 
       int x = 0; 
 
       do { 
           if (x++ > 5) 
               b = false; 
           System.out.print(x); 
       } while (b); 
   } 
} 
Ваши ответы
1234567
Объяснение:

Очевидно, что числа на экран будут выводиться последовательно. Остаётся только разобраться, какое число будет выведено первым, а какое – последним.
Поскольку при каждой проверке условия переменная x будет увеличиваться, то первым выведется число 1.
На последней итерации условие x++ > 5 должно стать истинным. Поскольку значением выражения x++ является исходное значение переменной, то это будет при x = 6. Но на экран уже будет выведено новое, увеличенное значение, т.е. 7.
Получаем ответ: 1234567.

Какой будет результат компиляции и выполнения данного кода?
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

Какое ключевое слово используется, чтобы показать, что с методом может работать не более чем один поток одновременно?
Ваши ответы
synchronized
Если во время работы приложения несколько раз обратиться к методу hashCode() одного и того же объекта с одним и тем же состоянием, то будет возвращаться одно и то же значение. А если то же самое сделать после перезапуска приложения, это значение может стать другим?
// Простой пример 
public class Test { 
   public static void main(String args[]) { 
       Object obj = new Object(); 
       System.out.println(obj.hashCode()); 
       System.out.println(obj.hashCode()); 
   } 
}
Ваши ответы
Да
Определите, какой результат получится при выполнении приведенного кода, если программа запустится с помощью строки java Class1 Hello world !!!
public class Class1 
{ 
  public static void main(String [] args) { 
     System.out.print(args[0] + args[1]); 
     System.out.println(args[1]); 
   } 
}
Ваши ответы
Helloworldworld
Что произойдет во время компиляции и выполнения данного кода?
class Base { 
   public String name = "Base"; 
   public String getName() { 
       return name; 
   } 
} 
 
class Sub extends Base { 
   public String name = "Sub"; 
   public String getName() { 
       return name; 
   } 
} 
 
public class Program { 
   public static void main(String[] args) { 
       Sub s = new Sub(); 
       Base b = s; 
       System.out.println(b.name); 
   } 
} 
Ваши ответы
Будет выведено "Sub"
Объяснение:

При обращении к полям используется тип ссылки, а не тип реального объекта. Если бы вместо обращения к полю был вызов переопределенного метода получения значения поля, то благодаря позднему связыванию мы получили бы значение из реального объекта.

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

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

Что будет напечатано в результате компиляции и выполнения следующего кода?
public class Test { 
   public static void main(String[] args) throws Exception {     
       A a = new A(); 
       a.setI(4); 
       if (a instanceof Cloneable) { 
           A a2 = (A) a.clone(); 
           System.out.println(a.getI() == a2.getI()); 
       } 
   } 
} 
 
class A implements Cloneable {     
   private int i; 
 
   public void setI(int i) { 
       this.i = i; 
   } 
 
   public int getI() { 
       return i; 
   } 
} 
Ваши ответы
true
Объяснение:

Ошибка связана с невоможностью доступа к clone методу. Он protected для класса Object. А интерфейс Cloneable не содержит никаких методов подлежащих переопределению.

Какой результат выполнения данного кода?
public class Starter extends Thread { 
   private int x = 2; 
 
   public static void main(String[] args) throws Exception { 
       new Starter().makeItSo(); 
   } 
 
   public Starter() { 
        x = 5; 
        start(); 
   } 
 
   public void makeItSo() throws Exception { 
       join(); 
       x = x - 1; 
       System.out.println(x); 
   } 
 
   public void run() { x *= 2; } 
} 
Ваши ответы
4
Объяснение:

Сначала происходит создание нового объекта - new Starter() - и сразу же вызывается его метод - makeItSo()

Каким будет результат компиляции и выполнения данного кода?
public class A { 
   public static void main(String[] args) { 
       for (int i = 0; ++i > 0;) { 
           System.out.println(i); 
       } 
   } 
} 
Ваши ответы
Какой результат выполнения программы:
class Tack { 
   static short s = 17; 
   public Tack(short ss) { 
       new Tack(); 
       s *= ss; 
   } 
   public Tack() { ; } 
} 
public class Bridle extends Tack { 
   public Bridle(int s) { System.out.println(s + 1); } 
   public static void main(String[] args) { 
       Bridle b = new Bridle(3); 
   } 
} 
Ваши ответы
Ошибка компиляции
Какие из следующих методов определены в классе Object?
Ваши ответы
sleep(...)
Что нужно вставить на место троеточия (...), чтобы предотвратить трагедию и получить в результате "I will be a good citizen."?
public class Test {     
   public static void main(String[] args) throws Exception { 
       boolean toBe = ... 
       PrinceOfDenmark hamlet = new PrinceOfDenmark(); 
       hamlet.tortureYourSelf((toBe || !toBe)); 
   } 
} 
 
class PrinceOfDenmark { 
   void tortureYourSelf(boolean mind) { 
       if (mind) { 
           System.out.println("I will hate everybody including myself!"); 
       } 
       else { 
           System.out.println("I will be a good citizen."); 
       } 
   } 
} 
Ваши ответы
В любом случае произойдет ошибка компиляции
Какой результат выполнения данного кода:
System.out.println( 0.3 == 0.1d + 0.1d + 0.1d ); 
Ваши ответы
true
Объяснение:

Правильный ответ на этот вопрос связан со способом представления дробных чисел в памяти компьютера. Напомним, что они хранятся в двоичном коде. Если попробовать перевести 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.