Her ikisi de biz java programcılarının karşısına sıklıkla çıkan hatalardandır. Her ikisi de uygulamamızın runtime’da ihtiyaç duyduğu bir class’ın bulunamadığını anlatmaktadır. Ancak aralarındaki farkları bilmek sorunun ana nedenini tespit etmek ve çözüm getirmek için önemli olabilir.
NoClassDefFoundError
uygulama kodunun ihtiyaç duyduğu ve derleme sırasında mevcut olan bir sınıfın runtime’da bulunamadığını
veya düzgün biçimde okunamadığını veya yüklenemediğini anlatır. Bu durum ya doğrudan o sınıfın uygulamanın classpath’inde
olmamasından ya da onun bağımlı olduğu başka bir class’ın yokluğundan kaynaklanıyor olabilir.
ClassNotFoundException
ise String ile ifade edilen bir java sınıfının runtime’da muhtemelen de Class.forName()
gibi bir
metot çağrısı ile yüklenmeye çalışılırken classpath’de bulunamadığını anlatmaktadır.
JDK’yı tasarlayanlar Error
sınıflarını JVM’e has uygulama tarafından üstesinden gelinemeycek “fatal” hatalar için
tasarladıklarından, NoClassDefFoundError
hatası da derleme sırasında işler yolunda iken runtime’da ilgili class(lar)ın
kaybolması uygulamanın bir hatası olmaktan çok çevresel bir hata olarak görüldüğünden Error
olarak ifade edilmiştir.
ClassNotFoundException
ise muhtemelen uygulama geliştiricinin veya kullanıcının bir hatasından kaynaklanmaktadır ve
uygulama tarafından “recover” edilmeye çalışılabilir bir hata olarak görüldüğü için Exception
olarak tasarlanmıştır.