• ⚡️ Последний шанс: Вебинар по пентесту стартует через 30 минут!

    Друзья, ровно через 30 минут (8 июля в 19:00) начинается наш практический вебинар по пентесту и поиску уязвимостей!

    Если вы хотите:
    🕵️‍♀️ Узнать, как находить и эксплуатировать уязвимости в веб-приложениях.
    💡 Получить ценные инсайты от настоящего эксперта.
    🚀 Сделать решительный шаг в мир кибербезопасности.
    То этот вебинар для вас!

    Ведущий вебинара – Александр Медведев – эксперт с более чем 10-летним опытом в сфере информационной безопасности, пятикратный победитель Standoff и обладатель престижных сертификаций: OSWE, OSCP, PNPT, CEH, CWAPT.

    Успейте присоединиться! Зарегистрироваться сейчас

    Возникли сложности с регистрацией? Пишите нам: @Codeby_Academy
    Будем вас ждать!

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

  • Автор темы Автор темы Louis
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
L

Louis

есть два примера :

Пример 1:

Код:
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:

Код:
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



Вопрос:
Почему в первом варинте выводится только статический логический болок а нестатический не выводиться??
а во втором примере выводятся оба?
 
Возможно, причина в том, что во втором случае ты создаёшь экземпляр класса (при этом инициализируются внутренние не-static поля), а в первом - нет (при этом инициализируются только static поля).
 
Возможно, причина в том, что во втором случае ты создаёшь экземпляр класса (при этом инициализируются внутренние не-static поля), а в первом - нет (при этом инициализируются только static поля).

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

Это связанно с работай виртуальной машины. В первом примере в виртуальную машину загружается класс(не путать с созданием экземпляра). При этом инициализируются сначала статические блоки, потом статические поля(что бы была возможность делать вызовы типа ClassName.field ClassName.method() ) при этом не создаётся экземпляр класса, соответственно конструктор не срабатывает...
Во втором варианте все еще более "запущено" При обращении к классу инициализируются статик блоки, потом статик поля, потом блоки инициализации,т.е. то что между такими {} кавычками, причем в порядке их следование в коде, т.е. сначала logc(1) id=0 потом logc(2) id=10. Потом уже вызывается констуктор, так как в этом примере экземпляр класса создаётся....
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab