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

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

+108

  • Кто проходил: Андрей1
  • Дата прохождения: 28.11.2018
У каких операторов всегда вычисляются все операнды (выберите все подходящие варианты)?
Ваши ответы
%
Объяснение:

Оператор || не вычисляет значение второго операнда, если первый операнд имеет значение true.
Оператор && не вычисляет значение второго операнда, если первый операнд имеет значение false.
Оператор ?: в зависимости от истинности условия вычисляет значение только одного из двух выражений.

Что произойдет после выполнения данного кода?
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.

Что произойдет при компиляции программы:
import static com.sun.PkgAccess.*; 
 
public class PkgAccess2 { 
   int x1 = PkgAccess.tiger; //1 
   int x2 = tiger;  //2 
   int x3 = com.sun.PkgAccess.tiger; //3 
   int x4 = sun.PkgAccess.tiger; //4 
} 
 
Если следующий класс находится в другом пакете:
package com.sun; 
public class PkgAccess { 
   public static int tiger = 1414; 
} 
Ваши ответы
Ошибка компиляции в строке 1
Ошибка компиляции в строке 4
Объяснение:

Если точно воспроизвести ситуацию, описанную в вопросе:
- класс PkgAccess2 находится в не именованном пакете
- класс PkgAccess находится в пакете com.sun
то компилятор выдаёт РОВНО две ошибки:
javac com/sun/PkgAccess.java ./PkgAccess2.java
.\PkgAccess2.java:4: error: cannot find symbol
int x1 = PkgAccess.tiger; //1
^
symbol: variable PkgAccess
location: class PkgAccess2
.\PkgAccess2.java:7: error: package sun does not exist
int x4 = sun.PkgAccess.tiger; //4
^
2 errors
Если воспроизвести этот пример, например, в Netbeans'е, то там тоже будут подсвечиваться две ошибки.

Какой будет результат компиляции и выполнения следующего кода?
public class IfElseTest { 
   public static void main(String...args) { 
       boolean b = false;  
       if (b == false) 
           if (b = false) 
               System.out.println("if statement"); 
       else 
           System.out.println("else statement"); 
   } 
} 
Ваши ответы
else statement
Объяснение:

else всегда относится к ближайшему if

Какой результат выполнение данного кода?
import java.util.Arrays; 
 
class Generic<T extends Number> {  
   private T arr[] = {1, 2, 3, 4, 5}; 
 
   public String toString(){  
       return Arrays.toString(arr); 
   }  
}  
 
public class Test {  
   public static void main(String [] args) {  
       Generic<Double> obj = new Generic<Double>(); 
       System.out.println(obj);  
   }  
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Ошибка компиляции при объявлении массива.
Списки инициализации не могут быть использованы для инициализации параметризованных массивов.

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

Что будет выведено следующей программой?
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 1 2 4
Объяснение:

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

После выполнения каких строк будет выведен 0, еcли i = 0?
Ваши ответы
System.out.println(i);
Объяснение:

Результатом постфиксных операций i++ и i-- будет исходное значение переменной i.
Результатом выражения i + '0' будет число 48 - код символа '0'.

Что выведется в консоль в результате компиляции и выполнения следующего кода:
public class A { 
   { 
       System.out.println("one"); 
   } 
 
   public static void main(String[] args) { 
       System.out.println("two"); 
   } 
 
   static { 
       System.out.println("three"); 
   } 
} 
Ваши ответы
three
two
Объяснение:

Статические блоки инициализации выполняются перед первым обращением к классу, т.е. перед вызовом метода main(). Поэтому сначала будет выведена строка "three", а затем "two".
Обычные блоки инициализации выполняются при создании экземпляра заданного класса, но в данном примере этого нет. Поэтому строка "one" выведена не будет.

Что произойдет при попытке скомпилировать и запустить данный код:
00: package test; 
01: public class Test { 
02:     public static void main(String [] args) { 
03:          Test test = new Test(); 
04:          System.out.println(test.toString()); 
05:     } 
06: } 
Ваши ответы
Код скомпилируется и выведет что-то наподобие следующего:
test.Test@42e816
Объяснение:

Все объекты в Java наследуются от класса Object. Т.к. класс Test не переопределяет метод toString(), то будет использоваться его реализация из класса Object, который возвращает строковое представление объекта в следующем виде:
название класса (с полным именем пакета) + символ @ + шестнадцатеричное беззнаковое значение хеш-кода объекта

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

Этот цикл for разворачивается компилятором в примерно такую конструкцию:

Что будет напечатано на экран следующим кодом:
class Main { 
   public static void main(String[] args) { 
       int i = 0; 
       System.out.println(++i == i++); 
       System.out.println(i++ == i++); 
   } 
} 
Ваши ответы
false
true
Что произойдет в результате выполнения следующего кода?
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"); 
   } 
} 
Ваши ответы
Код скомпилируется выполнится, но в консоль ничего не выведется.
Объяснение:

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

Какой результат компиляции и выполнении данного кода:
public class Clazz { 
   private void process(String... s) { 
       System.out.print("*"); 
   } 
   private void process(String s) { 
       System.out.print("1"); 
   } 
   private void process(String s, String a) { 
       System.out.print("2"); 
   } 
   public static void main(String[] args) { 
       Clazz c = new Clazz(); 
       c.process("asd"); 
       c.process("asd","asd"); 
       c.process("asd","asd","asd"); 
   } 
} 
Ваши ответы
1**
Объяснение:

Компилятор анализирует методы с vararg-параметрами в последнюю очередь, только если никакие другие методы не подошли. Поэтому вызовы process("asd") и process("asd","asd") будут откомпилированы без ошибок.

Какой будет результат компиляции и выполнения нижеприведенного кода?
1. public static void main(String[] args) { 
2.     for (int i = 0; i <= 10 ; i++) { 
3.         if (i > 6) break; 
4.     } 
5.     System.out.println(i); 
6. } 
Ваши ответы
7
Объяснение:

Переменнная "i" существует только в пределах цикла. В строке 5 она уже за пределами видимости.