Java'da statik yöntemler her zaman derleme zamanında çözülüyor mu?Java'da statik yöntemler her zaman derleme zamanında çözülüyor mu?
cevap
Kısa cevap: evet
Ben Java Language Specification kesin bölümünü bulmak mümkün değildi. Lütfen yardım et. :)
Evet, ancak statik yöntem çalışma zamanı tarafından kaldırılmışsa, temel sınıftaki eşleşen yöntem çağrılır (ad ve imza, derleme süresinden itibaren orijinal yöntemle tam olarak eşleşmelidir ve yönteme JVM tarafından erişilebilir olmalıdır) spec kuralları).
Derived.fn();
Ve aşağıdaki denilen kod:
class Base {
public static void fn() {
System.err.println("Base");
}
}
class Derived extends Base {
public static void fn() {
System.err.println("Derived");
}
}
Baskı Derived
Şimdi her şeyi derledim.
class Derived extends Base {
}
Baskı Base
: Sonra sadece Türetilmiş yeniden derlemek için değiştirildi.
class Derived {
}
bir hata Atar: Belki o zaman sadece Türetilmiş yeniden derlemek
olarak değiştirildi.
"Çalışma zamanı tarafından kaldırıldı"? Bu ne anlama geliyor? –
Bunun anlamı: eğer bir sınıf Sub.x() çağırmak için derlenmişse, o zaman x() yöntemi Sub'dan silinir fakat arayan sınıfı tekrar derlenmez, çalışma zamanında Base.x() eğer çağrılırsa var. – erickson
+1 muhtemelen bu soruya doğru bir yaklaşım – dfa
Çeşitli tırnak: derleyici o kesin yöntem her statik yöntem çağrısı (yani statik olmayan yönteme büyük bir fark var çağrıları için çağrılır derleme zamanında karar o sınıfı derlediğinde
": Kesin bir yöntem olduğu çağrılan sadece bu durumlarda çalışma zamanında karar verilir. "
"Statik yöntemlerin çağrılması, yalnızca çağrıldığı derleme zamanı türüne bağlıdır."
Soru için doğru yanıt, ancak yalnızca çalışma zamanında karar verilen statik olmayan yöntemlerle ilgili alıntı yanlıştır. Çalışma zamanında yalnızca geçersiz kılınan yöntemlere karar verilir, diğerleri de dahil olmak üzere derleme zamanında belirlenir. – Robin
@Robin: alıntı benim değil, iyi bir nokta olsa :) –
Bağlantı ölü gibi görünüyor –
- 1. Alay Statik Yöntemler
- 2. Polimorfizm ve Statik Yöntemler
- 3. R6 sınıflarında statik yöntemler
- 4. Python Statik yöntemler, neden?
- 5. Uçucu değişken, javada statik olarak tanımlanabilir mi?
- 6. Derleme zamanında 'ref' nasıl kullanılır?
- 7. C# Statik Yöntemler
- 8. F # Özel Statik Yöntemler
- 9. T derleme zamanında
- 10. Functons, statik yöntemler veya normal yöntemler
- 11. EventHandler her zaman boş mu?
- 12. Derleme zamanında C++ türü kimliği
- 13. İlkbaharda statik yöntemler nasıl engellenir?
- 14. Lokasyon neden derleme zamanında belirlenir?
- 15. Haskell, String hazır bilgilerini derleme zamanında birleştiriyor mu?
- 16. Eski özellikler sadece Derleme zamanında kontrol ediliyor mu?
- 17. PHP'de statik yöntemler için kurucu alternatifi
- 18. F # Sınıf İçi Statik Yöntemler
- 19. doAnswer statik yöntemler için - PowerMock
- 20. Neden tüm özel yöntemler için statik yöntemler kullanmıyorsunuz?
- 21. (öncelikle) statik dil derleme
- 22. SQLite her zaman okunan diski okuyor mu?
- 23. jQuery .inArray() her zaman doğru mu?
- 24. Android multitouch: ACTION_UP her zaman çağrılmıyor mu?
- 25. "Instanceof Void" her zaman false döndürüyor mu?
- 26. Thread.CurrentThread her zaman aynı örneği döndürüyor mu?
- 27. Tüm .c kaynak dosyalarında derleme zamanında derleme zamanı
- 28. Derleme zaman aralığı denetleyicisi
- 29. CUDA donanımı derleme zamanında mı gerekiyor?
- 30. Küçük bir sınama çerçevesi için derleme zamanında
kuralı uygulandığında, herhangi bir tehlikeli durum var mı? –
Başka bir kısa cevap: Hayır. –
@Joao: Java statik değiştiricisi tam olarak "derleme zamanında" anlamına gelir. Yöntem/değişken, sınıf adına statik olarak bağlanır. İstisna yok. – dfa