1 April 2010

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

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
Tags: программирование Java спецификация
Hubs: Java
+5
5.1k 26
Comments 11
Ads