public static class TestThread extends Thread {
static {
System.out.println("it's a static block inside TestThread");
}
@Override
public void run() {
System.out.println("it's a run method");
}
}
public static void main(String[] args) {
TestThread thread = new TestThread();
thread.start();
}
вопрос в том, что мы же просто вызвали старт, почему вызвался ран и статический?
да даже если без статики написать в
{ System.out.println("запустись");
}
то он тоже запуститься, вопрос собственно почему, чисто для понимания, видимо я что-то упустил в лекциях
Никита
46 уровень
кто вызывает run
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ваня Корниенко
27 марта, 18:19
Во-первых, метод start всегда вызывает метод run :)
Во-вторых, есть 2 вида блока инициализации.
Статический блок.
Его вид:
Он вызывается тогда, когда мы как-то обращаемся к классу, у которого этот блок написан (например, создаем объект класса, или обращаемся к статическому полю, или вызываем статический метод).
Например:
Теперь нестатический блок:
Он вызывается тогда, когда мы создаем объект класса, у которого этот блок написан:
Так как в задаче создается экземпляр, то любой блок инициализации будет вызван :) +2
Anonymous #3303140
27 марта, 18:16
* кто вызывает run
start()
* мы же просто вызвали старт
А что по-твоему делает метод старт? Это не пассивная агрессия, если что, просто помогаю разобраться. Заодно напиши, в чём ты понимаешь отличие start() от run().
* почему вызвался статический?
Многопоточность здесь ни при чём. Статические блоки выполняются при загрузке класса
* даже если без статики написать, то он тоже запуститься, вопрос собственно почему
А нестатические блоки выполняются при создании инстанса (экземпляра) класса
+1