10 интересных вопросов по Java, которые вам могут задать на собеседовании

Мы собрали 10 каверзных примеров программ, которые выводят какую-либо информацию. Вы должны взглянуть на код и сказать, что же выведет программа. Не исключено, что программа даже не скомпилируется. В этом случае вам надо указать, что выведет компилятор.
Такие вопросы любят задавать на собеседованиях, а потому не лишним будет освежить свои знания языка программирования Java. В спойлерах будут скрыты ответы — то, что выведет программа или компилятор. Постарайтесь подумать сами, прежде чем смотреть правильный ответ.
Что выведет следующая программа?
- Каждый раз, когда мы создаем объект какого-либо класса, первым вызывается конструктор и выделяется память для всех нестатических переменных.
- Здесь B b = new B(); объекту класса B присваивается новый объект того же класса.
- Запись B b = new B(); приводит к рекурсивному исполнению конструктора, что создает бесконечные объекты. Именно поэтому во время выполнения этого кода будет возбуждено исключение java.lang.StackOverFlowError в потоке "main".
- Распространенной причиной появления такого рода исключений является плохая рекурсия. Обычно это происходит из-за неправильного условия завершения.
Что выведет следующая программа?
- Мы можем вызвать статические методы, используя переменную, ссылающуюся на null. Дело в том, что статические методы находятся на уровне класса. Именно поэтому мы можем вызывать статические функции как при помощи самого класса, так и при помощи переменной, равной null.
Что выведет следующая программа?
Что выведет следующая программа?
Что выведет следующая программа?
Что выведет следующая программа?
- Какая строчка программы вызовет ошибку compile time error?
Что выведет следующая программа?
Что выведет следующая программа?
Что выведет следующая программа?
Что происходит при написании System.out.println(null);?
Происходит, разумеется, ошибка компиляции. У метода println есть несколько вариаций. Он может принимать String, Object или char[]. При передаче в эту функцию аргумента null компилятор не может определиться, к какому из трех методов обращаться.
Перегруженные методы:
- public void prinltln(String str) {
- public void prinltln(char[] ch) {
- public void prinltln(Object ch) {
Для компилятора вызов System.out.println(null) является неоднозначным, поскольку для вывода null‘a могут более-менее подойти два метода: println(String) и println(char[]). Но компилятор не знает, к какому конкретно методу обратиться. Чтобы компиляция прошла успешно, следует написать:
- System.out.println((String)null);
- System.out.println((char[])null);
- System.out.println((Object)null);
Но здесь нужно быть внимательным. Вызов System.out.println((char[])null); приведет к исключению runtime exception.
Перевод статьи «10 Interesting Core Java Interview Coding Questions and Answers»