Идентификаторы, литералы и переменные
Вопрос 1
Что будет, если попытаться откомпилировать и запустить следующий код:
int _ = 10;
System.out.println(_);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Начиная с версии Java 8 инструкция int _ = 10; не откомпилируется.
в. Начиная с версии Java 9 инструкция int _ = 10; не откомпилируется.
г. В любой версии Java код откомпилируется, но выпадет в ошибку во время выполнения.
в. Начиная с версии Java 9 инструкция int _ = 10; не откомпилируется.
В Java 9 нижнее подчёркивание "_" стало ключевым словом и поэтому больше может быть идентификатором. До 9-й версии нижнее подчёркивание могло входить в состав идентификатора и даже быть единственным символом в составе идентификатора.
Вопрос 2
Что будет, если попытаться откомпилировать и запустить следующий код:
String 3rdParty = "Vector Co., Ltd.";
System.out.println(3rdParty);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Ни в одной версии Java код не откомпилируется.
б. Ни в одной версии Java код не откомпилируется.
Идентификатор не может начинаться с цифры ни в одной версии Java.
Вопрос 3
Что будет, если попытаться откомпилировать и запустить следующий код:
final String FIRST-PLAYER = "user";
System.out.println(FIRST-PLAYER);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Ни в одной версии Java код не откомпилируется.
б. Ни в одной версии Java код не откомпилируется.
Идентификатор не может содержать знак минус "-" ни в одной версии Java.
Вопрос 4
Что будет, если попытаться откомпилировать и запустить следующий код:
String 龍 = "dragon";
System.out.println(龍);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Ни в одной версии Java код не откомпилируется.
а. В любой версии Java код откомпилируется и отработает без проблем.
龍 – алфавитный символ и может входить в состав идентификаторов Java. Код откомпилируется и выполнится без проблем и выведет в консоль слово "dragon".
Вопрос 5
Что будет, если попытаться откомпилировать и запустить следующий код:
String ☕ = "coffe";
System.out.println(☕);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Ни в одной версии Java код не откомпилируется.
б. Ни в одной версии Java код не откомпилируется.
☕ (как и другие эмодзи) не является алфавитным символом, символом подчёркивания или знаком доллара и не может входить в состав идентификаторов.
Вопрос 6
Что будет, если попытаться откомпилировать и запустить следующий код:
String String = "String";
System.out.println(String);
а. В любой версии Java код откомпилируется и отработает без проблем.
б. Ни в одной версии Java код не откомпилируется.
в. Код откомпилируется, но во время выполнения вылетит в ошибку.
а. В любой версии Java код откомпилируется и отработает без проблем.
Слово String не является ключевым словом языка и содержит только английские символы, а значит может быть именем переменной. Разумеется, смущает тот факт, что имя класса совпадает с именем переменной, но для Java это не проблема. Создайте новый класс с любым именем (например, Lesson) и объявите переменную с именем Lesson. Как бы вы ни использовали имя класса (например, для вызова статических методов) и одноимённую переменную, Java всегда будет знать, когда вы используете имя класса, а когда имя переменной.
Вопрос 7
Что будет, если попытаться откомпилировать и запустить следующий код:
int x = 1;
while (x < 3) {
int y = x++;
}
System.out.println(x);
а. Код откомпилируется, отработает и выведет на консоль 3.
б. Возникнет ошибка компиляции: variable y is already defined.
в. Код откомпилируется, но возникнет ошибка во время выполнения программы.
а. Код откомпилируется, отработает и выведет на консоль 3.
Фигурные скобки управляющего оператора while создают собственную область видимости переменных. На каждой итерации цикла мы каждый раз и заходим и выходим из этой области. Таким образом, на каждой итерации мы можем заново создавать переменную y, так как она была уничтожена на выходе из предыдущей итерации.
Вопрос 8
Что будет выведено на консоль, если откомпилировать и запустить следующий код:
public static void main(String[] args) {
int a = 1;
int b = 4;
countSum(a, b);
System.out.println(a);
}
public static void countSum(int x, int addendum) {
x = x + addendum;
}
а. 1
б. 5
а. 1
Поскольку в Java переменные передаются в методы только по значению, то параметр x метода countSum действительно пример значение 1, как у аргумента a. Но x и a расположены в разных ячейках в памяти и как бы ни менялось значение x внутри метода, это никак не повлияет на значение a. Так что на консоль попадёт изначальное значение a равное 1.
Вопрос 9
Начиная с какой строки, объект, помеченный в комментарии как bobik будет доступен для сборщика мусора?
class Animal {
public static void main(String[] args) {
Animal dog1 = new Animal(); //bobik
Animal dog2 = new Animal(); //tobik
dog1 = dog2; //1
dog1 = null; //2
dog2 = null; //3
}
}
а. Со строки, помеченной //1.
б. Со строки, помеченной //2.
в. Со строки, помеченной //3.
а. Со строки, помеченной //1.
Изначально на объект bobik ссылается переменная dog1. В строке, помеченной //1, этой переменной присваивается ссылка на тот же объект, на который ссылается переменная dog2, то есть на объект tobik.
С этого момента на объект bobik не ссылается ни одна переменная и объект становится доступен для сборщика мусора.