2009-05-31 13 views
11

Bu, Applet, Servlet, Midlet vb. Alt sınıflar için geçerlidirApplet'ler neden bir ana() gerekmez?

Neden bir main() gerekmez? Craplet sınıfını init() veya benzeri bir şeyle başlatmak istediğimde, bu kötü bir tasarım mı yoksa bunu yapmaya nasıl başlarım?

cevap

17

Bu aslında iyi bir tasarımdır, ancak belli değil ve ne yapmak istediğinizin hiçbir etkisi olmaz, bu nedenle küçük bir tezgah üstü sezgiseldir.

Bu tür uygulamalar, konteynerlerde hayatlarını sürdürür ve bu nedenle giriş noktaları, kapların uyması gereken standartlara göre belirlenir. Bu standartların tasarımcıları giriş noktası ana aramayı seçmedi. İşlevlerinizi geçersiz kılınan bir yöntemle yerleştirirsiniz. Onların üst sınıf, java.applet.Applet, bu yöntemleri vardır çünkü

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

Onlar bu yöntemleri vardır: Tüm uygulamalar aşağıdaki dört yöntemleri var.

üst sınıf bunlarda kukla kod ama bir şey yok:

public void init() {} 

size sınıf uygular ve yöntem çağrısı init() olmalıdır uzatmak veya init() adını değiştirmek için bir sınıf türetmek istiyorum. Bu, yöntemi istediğiniz gibi çağırmanıza izin vermek için polimorfizm kullanacaktır. Servlet konteynırı yazmıyorsanız, zamanınızı harcıyor olabilirsiniz.

11

Küçükler ve Servletler kendi işlemlerini başlatmaz. Bunun yerine bir konteynerin içinde çalışırlar. Bu nedenle, statik bir ana yönteme (süreci başlatan) ihtiyaç duymazlar, ancak konteynırlarıyla etkileşimde bulunmanın bir yolu vardır.

2

Bir uygulamanın (genellikle web tarayıcınız) yürütme ortamı, ulaşmanın hangi aşamasına ulaşıldığına bağlı olarak farklı yöntemlerle uygulama yöntemlerini çağırır. Bu, web için basit bir main() yönteminden daha uygun bir soyutlama seviyesi sağlar. Dahası, main() yöntemleriyle isteğe bağlı Java programlarının başlatılması genellikle bir güvenlik riski olarak kabul edilir.

3

'Ana' yalnızca C, C++ ve java'nın desteklediği bir sözleşmedir, ancak örneğin C veya C++'yi doğrudan Win32 API'sine karşı yazarsanız, ana() sahip olmanız gerekmez, ancak bunun yerine WinMain var.

+0

Ben sadece bir kongre ile beefs var ama gerçek için 0 ... Ben isimleri en iyi seçim olduğunda öfkeli olsun ... neden argümanlar olmadan ana adını vermedi? – ojblass

+1

çünkü komut satırı argümanlarını iletme mekanizması ... –

+0

En azından WinMain bir giriş noktası olmak için bazı referanslara sahipti. Ama sanırım farklıdır çünkü WinMain aslında bir köle değil, sorumluydu. Sanırım haklısın. – ojblass

0

Applet, ana() uygulamıyor çünkü uygulama yüklendiğinde, uygulama kodunu başlatmak ve yürütmek için belirli uygulama sınıfı yöntemlerini otomatik olarak çağırır. ve applet'in kendi yaşam döngüsü vardır.