Логические блоки

Тема в разделе "Java", создана пользователем Louis, 6 май 2008.

Статус темы:
Закрыта.
  1. Louis

    Louis Гость

    Репутация:
    0
    есть два примера :

    Пример 1:

    Код (Text):
    public class Quest5{

    {System.out.print("1");}
    static {System.out.print("2");}
    Quest5(){System.out.print("3");}

    public static void main(String [] args){

    System.out.print("4");


    }

    }
    При запуске на экране имеем - 24

    Пример 2:

    Код (Text):
    class Department {
    {
    System.out.println("logic (1) id=");
    }
    static {
    System.out.println("static logic");
    }
    private int id = 7;

    public Department(int d) {
    id = d;
    System.out.println("конструктор id=" + id);
    }
    int getId() {
    return id;
    }
    {
    id = 10;
    System.out.println("logic (2) id=" + id);
    }
    }

    public class DemoLogic {
    public static void main(String[] args) {
    Department obj = new Department(71);
    System.out.println("значение id=" + obj.getId());
    }
    }
    При запуске получаем :
    static logic
    logc(1) id=0
    logc(2) id=10
    конструктор id=71
    значение id=71



    Вопрос:
    Почему в первом варинте выводится только статический логический болок а нестатический не выводиться??
    а во втором примере выводятся оба?
     
  2. Yason

    Yason Гость

    Репутация:
    0
    Возможно, причина в том, что во втором случае ты создаёшь экземпляр класса (при этом инициализируются внутренние не-static поля), а в первом - нет (при этом инициализируются только static поля).
     
  3. Louis

    Louis Гость

    Репутация:
    0
    возможно...
     
  4. Creo

    Creo Гость

    Репутация:
    0
    Это связанно с работай виртуальной машины. В первом примере в виртуальную машину загружается класс(не путать с созданием экземпляра). При этом инициализируются сначала статические блоки, потом статические поля(что бы была возможность делать вызовы типа ClassName.field ClassName.method() ) при этом не создаётся экземпляр класса, соответственно конструктор не срабатывает...
    Во втором варианте все еще более "запущено" При обращении к классу инициализируются статик блоки, потом статик поля, потом блоки инициализации,т.е. то что между такими {} кавычками, причем в порядке их следование в коде, т.е. сначала logc(1) id=0 потом logc(2) id=10. Потом уже вызывается констуктор, так как в этом примере экземпляр класса создаётся....
     
Загрузка...
Похожие Темы - Логические блоки
  1. lisica198808
    Ответов:
    1
    Просмотров:
    1.512
  2. WebWare Team
    Ответов:
    5
    Просмотров:
    396
  3. Leon
    Ответов:
    21
    Просмотров:
    2.088
  4. Serduko
    Ответов:
    14
    Просмотров:
    2.783
  5. alien707
    Ответов:
    0
    Просмотров:
    892
Статус темы:
Закрыта.

Поделиться этой страницей