2009-05-31 18 views
11

애플릿, 서블릿, 미드 렛 등의 하위 클래스에 적용됩니다.왜 애플릿에는 main()이 필요하지 않습니까?

main()이 필요하지 않습니까? init() 또는 비슷한 것으로 시작하는 Craplet 클래스를 만들고 싶다면 나쁜 디자인입니까, 아니면 어떻게해야할까요?

답변

17

은 실제로 좋은 디자인하지만 명확하지 그리고 당신이 아무런 효과가 없을 것하고 싶은 것입니다. 응용 프로그램의

이러한 유형의 용기에 자신의 삶을 사는 등 자신의 엔트리 포인트가 기준에 의해 결정되므로 그 용기에 준수해야합니다. 이 표준의 설계자는 진입 점을 호출하지 않기로 결정했습니다. 재정의 된 방법으로 기능을 배치 할 수 있습니다. 그 슈퍼 클래스, java.applet.Applet는, 이러한 방법을 가지고 있기 때문에

public void init(); 
public void start(); 
public void stop(); 
public void destroy(); 

그들은 이러한 방법이 모든 애플릿은 다음과 같은 네 가지 방법이있다.

수퍼 클래스는 다음에 더미 코드하지만 아무것도하지 않습니다

public void init() {} 

을 당신이 당신의 클래스를 구현하고 메서드 호출 init()을 가져야한다 확장하거나 init()의 이름을 변경하는 클래스를 파생하십시오. 이렇게하면 다형성을 사용하여 원하는대로 메서드를 호출 할 수 있습니다. 서블릿 컨테이너를 작성하지 않으면 시간 낭비가 될 수 있습니다.

11

애플릿과 서브릿은 자체 프로세스를 시작하지 않습니다. 대신 그들은 컨테이너 안에서 실행됩니다. 따라서 정적 메서드 (프로세스를 시작하는 정적 메서드)는 필요 없지만 컨테이너와 상호 작용할 수 있습니다.

2

애플릿의 실행 환경 (일반적으로 웹 브라우저)가 도달 년대 렌더링의 어떤 단계에 따라 다른 지점에서 애플릿 메소드를 호출합니다. 이는 단순한 main() 방법보다 웹에 더 적합한 추상화 수준을 제공합니다. 또한, main() 메소드를 사용하여 임의의 Java 프로그램을 시작하면 일반적으로 보안 상 위험한 것으로 간주됩니다. 조금 카운터 직관적 그래서

3

'주'는 단지 C, C++ 및 Java는 일반적으로 지원 관례이지만 C 또는 C++ 직접 Win32 API를 상대로을 작성하는 경우, 예를 들어, 당신은 당신을) (주이 있어야하지만 대신하지 않습니다 WinMain 있습니다. 애플릿이로드 될 때 자동으로 시작하는 애플릿 클래스의 특정 메서드를 호출하고 애플릿 코드를 실행하기 때문에

+0

나는 그것의 단지 컨벤션와 취향하지만, 사실에 대한 일이 ... 나는 너무 화가? – ojblass

+1

명령 줄 인수를 전달하는 메커니즘이기 때문에 ... –

+0

적어도 WinMain은 진입 점이되는 것에 대한 일부 참조가있었습니다. WinMain이 사실 담당하고 노예가 아니기 때문에 그것이 다르다고 생각합니다. 네가 옳은 것 같아. – ojblass

0

애플릿은 main()을 사용하지 마십시오. 및 애플릿에는 자체 수명주기가 있습니다. 이름이 최선의 선택 ... 왜 그들이 그것을 인수없이 주요 이름을하지 않은 경우

관련 문제