Показаны сообщения с ярлыком Core. Показать все сообщения
Показаны сообщения с ярлыком Core. Показать все сообщения

понедельник, 4 февраля 2013 г.

Nested and inner classes

Вложенные классы делятся на статические и нестатические (non-static). Собственно нестатические вложенные классы имеют и другое название - внутренние классы (inner). Внутренние классы в Java делятся на три вида: внутренние классы-члены (member inner classes); локальные классы (local classes); анонимные классы (anonymous classes). Локальный класс – в пределах метода или блока, не может быть public, private, protected, static.

Раннее и позднее связывание

public class LinkageTest{
    public static class Parent{
        public void test(){
            System.out.println("parent::test");
        }
    }
    public static class Child extends Parent{
        public void test(){
            System.out.println("child::test");
        }
    }
    public static class Tester{
        public void test(Parent obj){
            System.out.println("Testing parent...");
            obj.test();
        }
        public void test(Child obj){
            System.out.println("Testing child...");
            obj.test();
        }
    }
    public static void main(String[] args){
        Parent obj = new Child();
        Tester t = new Tester();
        t.test(obj);
    }
}
Результатом выполнения будет: Testing parent... child::test

воскресенье, 3 февраля 2013 г.

Exceptions and finally blocks

public class ExceptionLossTest{
    public static void main(String[] args){
        try {
            try {
                throw new Exception("a");
            } finally {
                if (true) {
                    throw new IOException("b");
                }
                System.err.println("c");
            }
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        } catch (Exception ex) {
            System.err.println("d");
            System.err.println(ex.getMessage());
        }
    }
}
Результатом его выполнения будет вывод в консоль b. И только. Return в finally тоже затирает другие ретурны

вторник, 9 августа 2011 г.

UnsupportedOperationException

Столкнулся с UnsupportedOperationException при попытке вызова метода add() у объекта через ссылку типа List. Проблема оказалась в следующем: один из вызываемых методов присваивал этой переменной значение Collections.EMPTY_LIST, который является Immutable (т.е. неизменяемым) объектом, соответственно при попытке вызвать add() выбрасывается UnsupportedOperationException.
Очень кратко это выглядит так:

  1. List<Object> list = Collections.emptyList();
  2. list.add(new Object()); // здесь будет выброшено UnsupportedOperationException


P.S.  Collections.emptyList() и Collections.EMPTY_LIST отличаются только тем, что метод emptyList() является type-safety.