Java для профессионалов: задачи на знание спецификации

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

    Данный топик посвящен коротким примерам программ (или участков кода). Для каждой программы требуется ответить на простые вопросы: как она будет выполняться и что будет выведено на консоль после ее выполнения. Предполагается использование Java 1.6, если в задаче не указано иное.



    P.S. Если у вас есть интересные задачи на эту же тему — выкладывайте в комментариях.

    Предлагаю вашему вниманию первую порцию задач.

    1. Какую численную константу нужно подставить вместо многоточия, чтобы выражение стало истиным? (принимаются также ответы в виде стандартных констант, объявленных в классах-обертках над примитивными типами)

      (int) ((char) -1) == ...
      
      (short) ((int) ((char) -1)) == ...
      

    2. Какую константу нужно подставить вместо многоточия, чтобы на экран вывелось COOL?

      int x = ...;
      
      if (x != 0 && x == -x) {
      	System.out.println("COOL");
      }
      


      Что изменится, если поменять тип на long?
    3. Какую константу нужно подставить вместо многоточия, чтобы на экран вывелось COOL?

      double x = ...;
      
      if (x != x) {
      	System.out.println("COOL");
      }
      


    4. Что будет выведено в результате выполнения данной программы?

      public class Test {
      	static int a() { print("a"); return 1; }
      	static int b() { print("b"); return 1; }
      	static int c() { print("c"); return 1; }
      
      	static void print(String s) { System.out.println(s); }
      
      	public static void main(String[] p) {
      		int d = a() + b() * c();
      		print("" + d);
      	}
      }
      

    5. Что будет выведено в результате выполнения данной программы?

      public class Test {
      	static int a() { print("a"); return 1; }
      	static int b() { print("b"); return 1; }
      	static int c() { print("c"); return 1; }
      
      	static void print(String s) { System.out.println(s); }
      
      	public static void main(String[] p) {
      		if (a() == b() || a() == c()) {
      			print("d");
      		}
      	}
      }
      

    6. Что будет выведено в результате выполнения данной программы?

      public class Test {
      	static int a() { print("a"); return 1; }
      	static int b() { print("b"); return 1; }
      	static int c() { print("c"); return 1; }
      
      	static void print(String s) { System.out.println(s); }
      
      	public static void main(String[] p) {
      		try {
      			if ((a() + b()) / (a() - b()) + c() == a()) {
      				print("d");
      			}
      		} catch (Throwable e) {
      		}
      	}
      }
      

    7. Что будет выведено в результате выполнения данной программы?

      class BasicExcept extends RuntimeException {
        private int b = 10;
      
        public BasicExcept() {
          b = 15;
          throw this;
        }
      
        {
          b = 5;
        }
      
        public int getB() {
          return b;
        }
      
        public String toString() {
          return "Superclass";
        }
      }
      
      class Except extends BasicExcept {
        private int a = 10;
      
        public Except() {
          super();
          a = 15;
        }
      
        {
          a = 5;
        }
      
        public int getA() {
          return a;
        }
      
        public String toString() {
          return "Subclass";
        }
      }
      
      
      public class Test {
        public static void main(String[] args) {
          try {
            new Except();
            System.out.println("No exception");
          } catch (Except e) {
            System.out.println("Exception occured! A = " + e.getA()
                + ", B = " + e.getB()
                + ", toString() = " + e.toString());
          }
        }
      }
      

    8. Что будет выведено в результате выполнения данной программы?

      class TryExcept extends RuntimeException {
          private String s;
      
          static {
              init();
          }
      
          public TryExcept() {
              s = "Hahaha";
          }
      
          private static void init() {
              throw new TryExcept();
          }
      
          public String get() {
              return s;
          }
      }
      
      public class Test {
          public static void main(String[] args)
          {
              for (int i = 0; i < 2; i++) {
                  try {
                      new TryExcept();
                  } catch (Throwable e) {
                      System.out.println("e = " + e);
      
                      if (e.getCause() instanceof TryExcept) {
                          TryExcept ex = (TryExcept) e.getCause();
                          System.out.println("e instanceof "
                              + TryExcept.class.getName()
                              + ", s = " + ex.get());
                      }
                  }
              }
          }
      }
      



    Спасибо тем, кто помог найти и исправить ошибки в топике:
    barker, mohax, sanix
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 11

      +4
      Во втором и третьем пункте сразу пришло в голову вот такое. Всё по условию (:

      58; System.out.println(«COOL»)
        +3
        Если серьёзно, то в третьем точно сработает (по определению) NaN, то есть вместо многоточия надо подставить что-то типа 0.0/0.0, ну или Double.NaN, например.
        Во втором предположительно подойдёт 0x80000000 (оно же Integer.MIN_VALUE).
          0
          и второй, и третий ответы правильные )
          0
          Спасибо за замечание ) исправил условие
        • НЛО прилетело и опубликовало эту надпись здесь
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              спасибо, исправлено.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Да, там исключение, так и должно быть.
              Но вопрос стоит — что будет выведено? Перед исключением будут выведены еще и результаты выполнения метода print(), их и требуется показать.
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Задачи на знание спецификации — не нужны.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое