Это относится к подклассам 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, С++ и java, но, например, если вы пишете C или С++ непосредственно против Win32 API, вам не нужно иметь main(), но вместо этого у вас есть WinMain.
Завершающая среда апплета (как правило, ваш веб-браузер) вызывает методы апплета в разных точках в зависимости от того, на какой стадии рендеринга он достиг. Это обеспечивает уровень абстракции, который лучше подходит для Интернета, чем простой метод main()
. Кроме того, запуск произвольных Java-программ с помощью методов main()
обычно считается чем-то вроде риска для безопасности.
Апплет не использует main(), потому что, когда апплет загружается, он автоматически вызывает определенные методы класса апплета для запуска и выполняет код апплета. и апплет имеет свой собственный жизненный цикл.