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»