Bazen görüyorum
try {
} catch(Throwable e) {
}
Ve bazen
try {
} catch(Exception e) {
}
Fark ne?
Bazen görüyorum
try {
} catch(Throwable e) {
}
Ve bazen
try {
} catch(Exception e) {
}
Fark ne?
Yanıtlar:
Yakalayarak Throwablealt sınıf şeyler içerir Error. Bunu yapmak istememelisiniz, belki de bir iş parçacığının en yüksek "tümünü yakala" düzeyi dışında oturum açmak veya yanlış gidebilecek her şeyi kesinlikle ele almak dışında. Bilinmeyen kod çalıştırabileceği ve bu kodla ilgili yanlış giden herhangi bir şeyden etkilenmemesi gereken bir çerçeve tipi uygulamada (örneğin bir uygulama sunucusu veya bir test çerçevesi) daha tipik olacaktır .
throw new Throwable();, bu yüzden her şeyi gerçekten yakalamanın tek yolu bu.
Birincisi, tüm alt sınıflarını yakalar Throwable(buna Exceptionve içerir Error), ikincisi ise tüm alt sınıflarını yakalar Exception.
Errorprogramlı olarak hiçbir şekilde kurtarılamaz ve günlük tutma amaçları dışında (tekrar geçiren) genellikle yakalanamaz. Exceptionprogramlı olarak kurtarılabilir. Alt sınıfı RuntimeExceptionbir programlama hatasını gösterir ve genellikle yakalanmayacaktır.
Errorve 2) Günlük kaydı olmadığı sürece, bir OOM'nin gerçekleştiğini asla bildiremeyebilirsiniz, bu da sunucunun neden "komik" davranmaya başladığını merak etmenize neden olmaz
programmatically unrecoverableTam olarak ne demek? O kadar şiddetli mi, sonuç olarak JVM'den tahmin edilemeyen bir davranış elde etme şansı olmadan artık yakaladıktan sonra (günlük kaydı vb.) HERHANGİ BİR Java yöntemini çağıramayız?
Its subclass RuntimeException indicates a programming error: Bu ifadeye katılıp katılmadığımdan emin değilim. Bu doğruysa, beklenen tüm istisnaların istisnaların kontrol edilmesi gerektiği anlamına gelir. Bir şeyin başarısız olmasını ve başvurum tarafından kurtarılamaz olmasını beklersem, ancak en azından anlamlı bir istisna atmak isterim? Bu durumda işaretli bir istisna kullanmak işe yaramaz gibi görünür ve kaynak plakası oluşturur.
Thowableartık kullanımdan kaldırılmış Thread.stop()yöntemden bir iş parçacığını durdurmak için varsayılan olarak atılan ThreadDeath bile her şeyi yakalar . Bu yüzden yakalayarak Throwable, en azından catch bloğunuzdan geçmeden try bloğundan asla ayrılmayacağınızdan emin olabilirsiniz, ancak OutOfMemoryErrorve InternalErrorveya StackOverflowError.
Yakalama Throwable, her türlü isteği dış koda devreden dış sunucu döngüleri için yararlıdır, ancak hizmeti canlı tutmak için hiçbir zaman sonlandırılmayabilir.
ThrowableExceptionyanı sıra süper sınıfıdır Error. Normal durumlarda, her zaman alt sınıflarını yakalamalıyız Exception, böylece kök neden kaybolmaz.
Sadece Java kodunuzu kontrol etmeyen şeylerin yanlış gitme olasılığını gördüğünüz özel durumlar, Errorya da yakalamanız gerekir Throwable.
Yerel bir kitaplığın yüklü olmadığını işaretlemek için Throwable'ı yakaladığımı hatırlıyorum.