пятница, 6 сентября 2013 г.

Static Initializer Block

Блок загрженного в JVM класса, который вызывается только один раз до вызова конструктора класса или его метода мейн. Тоесть если мы создаем инстанцию класса, то только в этот момент будет вызван этот блок, все последующие создания обьектов уже этот блок вызывать не будут, таже история с методом мейн.

Правила:

  1. Код пишется в блоке static { }, который ставится в пределах класса.
  2. Блок ничего не возвращает - return.
  3. Никаких обращений к инстанции - this, super.
  4. Может выкидывать только  Unchecked Exceptions( инстанции классов RuntimeException, Error и их наследники).

Используется это для:

  1. Загрузка драйверов и другого в пространство имен (For example ‘Class.forName(“com.mysql.jdbc.Driver”)’).
  2. Проинициализировать сложные статические поля класса один раз(final static).
  3. Логирование.
  4. Создание и распарсивание подготовленных SQL-выражений. 

 
class Loader {
    static final String theName = "The Loader";
    static {
        System.out.println("Loader.static");
    }
    Loader() {
        System.out.println("Loader.Loader()");
    }
}


class Test extends Loader {
 final static Integer i;
 
    static {     
        System.out.println( "Test.static");
        i = new Integer(5);
    }
    
    {
     System.out.println( "Test.non-static");
    }
    
    Test() {
        System.out.println( "Test.Test()");
    }
    public static void main( String [] args ) {
        System.out.println( "Test.main");
        Test t = new Test();
        Test t2 = new Test();
        Test t3 = new Test();
        System.exit(0);
    }
}
Loader.static
Test.static
Test.main
Loader.Loader()
Test.non-static
Test.Test()
Loader.Loader()
Test.non-static
Test.Test()
Loader.Loader()
Test.non-static
Test.Test()

Комментариев нет:

Отправить комментарий