Написать пост

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

Аватар Типичный программист

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

Мы собрали 10 каверзных примеров программ, которые выводят какую-либо информацию. Вы должны взглянуть на код и сказать, что же выведет программа. Не исключено, что программа даже не скомпилируется. В этом случае вам надо указать, что выведет компилятор.

Такие вопросы любят задавать на собеседованиях, а потому не лишним будет освежить свои знания языка программирования Java. В спойлерах будут скрыты ответы — то, что выведет программа или компилятор. Постарайтесь подумать сами, прежде чем смотреть правильный ответ.

Что выведет следующая программа?

			package com.instanceofjava;
 
public class B {
 
  B b = new B();
 
 public int show(){
      return (true ? null : 0);
 }
 
 public static void main(String[] args)  {
 
        B b = new B();
        b.show();
    }
}
		
Посмотреть ответ
			
		
  • Каждый раз, когда мы создаем объект какого-либо класса, первым вызывается конструктор и выделяется память для всех нестатических переменных.
  • Здесь B b = new B(); объекту класса B присваивается новый объект того же класса.
  • Запись B b = new B(); приводит к рекурсивному исполнению конструктора, что создает бесконечные объекты. Именно поэтому во время выполнения этого кода будет возбуждено исключение java.lang.StackOverFlowError в потоке "main".
  • Распространенной причиной появления такого рода исключений является плохая рекурсия. Обычно это происходит из-за неправильного условия завершения.

Что выведет следующая программа?

			package com.instanceofjava;
 
public class A{

 
 public static void show(){
 
        System.out.println("Static method called");
 }
 
 public static void main(String[] args)  {
 
        A obj = null;
        obj.show();
 
    }
}
		
Посмотреть ответ
			
		
  • Мы можем вызвать статические методы, используя переменную, ссылающуюся на null. Дело в том, что статические методы находятся на уровне класса. Именно поэтому мы можем вызывать статические функции как при помощи самого класса, так и при помощи переменной, равной null.

Что выведет следующая программа?

			package com.instanceofjava;
 
public class A{
 
static int a = 1111;
static
{
        a = a-- - --a;
}
    
{
        a = a++ + ++a;
}
 
 public static void main(String[] args)  {
       System.out.println(a);
    }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
 
public class A{
 int GetValue()
 {
        return (true ? null : 0);
 }
 
 public static void main(String[] args)  {
      A obj = new A();
      obj.GetValue();
 }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
 
public class A{ 
 public static void main(String[] args)  {
   Integer i1 = 128;
   Integer i2 = 128;
   System.out.println(i1 == i2);

   Integer i3 = 127;
   Integer i4 = 127;
   System.out.println(i3 == i4);
 }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
class A
{   
 void method(int i)
 {
 
 }
}
 
class B extends A
{
 @Override
 void method(Integer i)
 {
 
 }
}
		
Посмотреть ответ
			
		
  • Какая строчка программы вызовет ошибку compile time error?
			package com.instanceofjava;
class A
{   
 public static void main(String [] args)
 {
  Integer i = new Integer(null);
  String s = new String(null);
 }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
class A
{   
 public static void main(String [] args)
 {
  String s = "ONE"+3+2+"TWO"+"THREE"+5+4+"FOUR"+"FIVE"+5;
  System.out.println(s);
 }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
class A
{
 
 static int method1(int i)
 {
  return method2(i *= 11);
 }
 
 static int method2(int i)
 {
  return method3(i /= 11);
 }
 
 static int method3(int i)
 {
 return method4(i -= 11);
 }
 
 static int method4(int i)
 {
  return i += 11;
 }   
 
 public static void main(String [] args)
 {
  System.out.println(method1(11));
 }
}
		
Посмотреть ответ
			
		

Что выведет следующая программа?

			package com.instanceofjava;
class A
{   
 public static void main(String [] args)
 {
  System.out.println(null);
 }
}
		
Посмотреть ответ
			
		

Что происходит при написании 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»

Следите за новыми постами
Следите за новыми постами по любимым темам
60К открытий60К показов