Это относится к подклассам Applet, Servlet, Midlet и т. Д.
Почему им не нужен main()
? Если бы я хотел создать Craplet
класс, который начинается с init()
или что-то подобное, это плохой дизайн или как бы я это сделал?
Это относится к подклассам Applet, Servlet, Midlet и т. Д.
Почему им не нужен main()
? Если бы я хотел создать Craplet
класс, который начинается с init()
или что-то подобное, это плохой дизайн или как бы я это сделал?
На самом деле это хороший дизайн, но неочевидный, и то, что вы хотите сделать, не окажет никакого эффекта, поэтому это немного противоречит интуиции.
Эти типы приложений живут в контейнерах, и поэтому их точки входа определяются стандартами, которым должны соответствовать эти контейнеры. Разработчики этих стандартов предпочли не называть точку входа основной. Вы бы поместили свою функциональность в замещаемый метод. Все апплеты имеют следующие четыре метода:
public void init();
public void start();
public void stop();
public void destroy();
У них есть эти методы, потому что их суперкласс java.applet.Applet
имеет эти методы.
В суперклассе нет ничего, кроме фиктивного кода:
public void init() {}
Если вы хотите создать класс для расширения или изменения имени init()
, вам следует реализовать свой класс и вызвать метод init()
. Это будет использовать полиморфизм, чтобы вы могли вызывать метод как угодно. Если вы не пишете контейнер сервлетов, вы, скорее всего, зря теряете время.
Апплеты и сервлеты не запускают собственный процесс. Вместо этого они работают внутри контейнера. Следовательно, им не нужен статический основной метод (который запускает процесс), а нужен способ взаимодействия со своим контейнером.
'main' - это просто соглашение, которое обычно поддерживают C, C ++ и java, но, например, если вы пишете C или C ++ непосредственно против Win32 API, вам не обязательно иметь main (), но вместо этого у вас есть WinMain.
Среда выполнения апплета (обычно ваш веб-браузер) вызывает методы апплета в разных точках в зависимости от того, на каком этапе рендеринга он достигнут. Это обеспечивает уровень абстракции, который лучше подходит для Интернета, чем простой main()
метод. Кроме того, запуск произвольных программ Java с main()
методами обычно рассматривается как угроза безопасности.
Апплет не использует main (), потому что при загрузке апплета он автоматически вызывает определенные методы класса апплета для запуска и выполняет код апплета. и апплет имеют свой жизненный цикл.