Temel Java ve Throwables'ın farklı türleri hakkında daha fazla bilgi edinmeye çalışıyorum, biri İstisnalar ve Hatalar arasındaki farkları bana bildirebilir mi?
Temel Java ve Throwables'ın farklı türleri hakkında daha fazla bilgi edinmeye çalışıyorum, biri İstisnalar ve Hatalar arasındaki farkları bana bildirebilir mi?
Yanıtlar:
Hatalar yakalanmamalı veya ele alınmamalıdır (en nadir durumlar hariç). İstisnalar istisna işleme ekmek ve tereyağı vardır. Javadoc iyi açıklıyor:
Hata, makul bir uygulamanın yakalamaya çalışmaması gereken ciddi sorunları gösteren Throwable'ın bir alt sınıfıdır. Bu tür hataların çoğu anormal durumlardır.
Error
JavaDoc yorumlarından bazılarını alarak alt sınıflarından birkaçına bakın :
AnnotationFormatError
- Ek açıklama ayrıştırıcısı bir sınıf dosyasından bir ek açıklama okumaya çalıştığında ve ek açıklamanın hatalı biçimlendirildiğini belirlediğinde atılır.AssertionError
- Bir iddianın başarısız olduğunu göstermek için atılır.LinkageError
- LinkageError alt sınıfları, bir sınıfın başka bir sınıfa bağımlı olduğunu gösterir; ancak, ikinci sınıf, önceki sınıfın derlenmesinden sonra uyumsuz bir şekilde değişmiştir.VirtualMachineError
- Java Sanal Makinesinin bozulduğunu veya çalışmaya devam edebilmesi için gerekli kaynakların tükendiğini belirtmek için atılmıştır. Gerçekten üç önemli alt kategori vardır Throwable
:
Error
- Yeterince şiddetli bir şey yanlış gitti, çoğu uygulama sorunu ele almaya çalışmak yerine çökmeli,RuntimeException
) - Çoğunlukla NullPointerException
veya yasadışı bir argüman gibi bir programlama hatası . Uygulamalar bazen bu Throwable
kategoriden yararlanabilir veya kurtarabilir - veya en azından Konu run()
yönteminde yakalayabilir , şikayeti kaydedebilir ve çalışmaya devam edebilir.FileNotFoundException
ve TimeoutException
...@ Georgios-gousios tarafından Java'nın istisna hiyerarşisini gösteren bu slayt , Java'daki Hatalar ve İstisnalar arasındaki farkları kısaca açıklar.
Hatalar, uygulamanızın bildiğiniz gibi sona erdiğini gösterir. Genellikle kurtarılamaz ve VM'nizin çıkmasına neden olur. Bunları yakalamak, çıkmadan önce muhtemelen günlük veya ekran ve uygun mesaj haricinde yapılmamalıdır.
Örnek: OutOfMemoryError - Programınız artık çalışamayacağı için yapabileceğiniz çok şey yok.
İstisnalar genellikle kurtarılabilir ve olmasa bile, genellikle sadece bir girişim girişiminin başarısız olduğu anlamına gelir, ancak programınız hala devam edebilir.
Örnek: IllegalArgumentException - Yöntem çağrısı başarısız olmak için bir yönteme geçersiz veriler iletildi , ancak gelecekteki işlemleri etkilemez.
Bunlar basit örneklerdir ve yalnızca İstisnalar hakkında başka bir bilgi zenginliği daha vardır.
Hatalar -
Error
java s türündedir java.lang.Error
.Error
çalışma zamanında olur. Derleyici tarafından bilinmeyeceklerdir. Error
s çoğunlukla uygulamanın çalıştığı ortamdan kaynaklanır. java.lang.StackOverflowError
,java.lang.OutOfMemoryError
Exception
java s türündedir java.lang.Exception
.Exception
s hem işaretli hem de işaretsiz tip içerir.try-catch
bloklar aracılığıyla işleyerek kurtarabilirsiniz .Exception
s çoğunlukla uygulamanın kendisinden kaynaklanır.SQLException
, IOException
ArrayIndexOutOfBoundException
, ClassCastException
,NullPointerException
daha fazla okuma: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
Error
Sınıfın açıklaması oldukça açıktır:
An
Error
,Throwable
makul bir uygulamanın yakalamaya çalışmaması gereken ciddi sorunları gösteren bir alt sınıftır. Bu tür hataların çoğu anormal durumlardır.ThreadDeath
Hata, "normal" bir durum olsa da, aynı zamanda bir alt sınıfıdırError
uygulamaların çoğu bunu yakalamaya çalışmamalıdır çünkü.Yöntemin
Error
yürütülmesi sırasında atılabilecek ancak yakalanamayan alt sınıflarının herhangi bir alt maddesini beyan etmek için bir yönteme gerek yoktur, çünkü bu hatalar asla meydana gelmemesi gereken anormal durumlardır.
Java'nın sınıfınError
kendi belgelerinden alıntılanmıştır .
Kısacası, bunu yakalamamalısınız Error
, ancak bunu yapmak için iyi bir nedeniniz var. (Örneğin, bir sunucu uygulamasının belleği veya benzeri bir şey biterse web sunucusu uygulamanızın çökmesini önlemek için.)
Bir Exception
diğer taraftan, herhangi bir diğer modern dildeki gibi sadece normal bir istisnadır. Java API belgelerinde veya herhangi bir çevrimiçi veya çevrimdışı kaynakta ayrıntılı bir açıklama bulacaksınız.
Sınıflar java.lang.Exception
ve arasında birkaç benzerlik ve farklılık vardır java.lang.Error
.
benzerlikler:
İlk - Her iki sınıfları uzanır java.lang.Throwable
ve bu şekilde hataları ile uğraşırken yaygındır yöntemlerin birçoğu sonucunda devralır kullanılacak: getMessage
, getStackTrace
, printStackTrace
vb.
İkincisi, java.lang.Throwable
her ikisinin de alt sınıfları olarak aşağıdaki özellikleri miras alırlar:
Fırlatılabilir kendisi ve alt sınıflarından herhangi biri (dahil java.lang.Error
) throws
anahtar kelime kullanılarak yöntem istisnaları listesinde bildirilebilir . İşbu beyan sadece gerekli java.lang.Exception
ve alt sınıfları için java.lang.Throwable
, java.lang.Error
ve java.lang.RuntimeException
ve bunların alt sınıfları da isteğe bağlıdır.
java.lang.Throwable
Bu catch
maddede yalnızca ve alt sınıfların kullanılmasına izin verilir .
java.lang.Throwable
- anahtar kelimesi ile yalnızca ve alt sınıflar kullanılabilir throw
.
Bu özelliğin sonucu her ikisini de takip eder java.lang.Error
ve java.lang.Exception
yöntem başlığında bildirilebilir, catch
yan tümce olabilir, anahtar sözcük ile kullanılabilir throw
.
farklılıklar:
İlk - kavramsal fark: java.lang.Error
JVM tarafından atılacak ve ciddi sorunları gösterecek şekilde tasarlanmıştır ve yakalanmak yerine programın yürütülmesini durdurmayı amaçlamaktadır (ancak diğer herhangi bir java.lang.Throwable
halef için olduğu gibi mümkündür ).
Javadoc açıklaması hakkında bir pasaj java.lang.Error
:
... makul bir uygulamanın yakalamaya çalışmaması gereken ciddi sorunları belirtir.
Bunun tersi java.lang.Exception
, program yürütmesini sonlandırmadan bir programcı tarafından beklenen ve ele alınabilecek hataları temsil edecek şekilde tasarlanmıştır.
Javadoc açıklaması hakkında bir pasaj java.lang.Exception
:
... makul bir uygulamanın yakalamak isteyebileceği koşulları belirtir.
java.lang.Error
ve java.lang.Exception
ilk bir olarak kabul kontrolsüz derleme zamanı istisna kontrolü için istisna. Sonuç kodu atma java.lang.Error
veya alt sınıfları, yöntem başlığında bu hatayı bildirmek zorunda değildir. java.lang.Exception
Yöntem başlığında gerekli bildirimi atarken .Fırlatılabilir ve ardıl sınıf diyagramı (özellikler ve yöntemler atlanmıştır).
IMO hatası, uygulamanızın başarısız olmasına neden olabilecek bir şeydir ve işlenmemelidir. Bir istisna, öngörülemeyen sonuçlara neden olabilecek, ancak kurtarılabilecek bir şeydir.
Misal:
Bir programın belleği dolduysa, uygulama devam edemediğinden bu bir hatadır. Ancak, bir program yanlış bir giriş türünü kabul ederse, program tarafından işlenebileceği ve doğru giriş türünü almak üzere yeniden yönlendirebileceği için bir istisnadır.
Hatalar çoğunlukla uygulamanın çalıştığı ortamdan kaynaklanır. Örneğin, OutOfMemoryError, JVM'nin belleği dolduğunda veya StackOverflowError, yığın taştığında oluşur.
İstisnalar çoğunlukla uygulamanın kendisinden kaynaklanır. Örneğin, bir uygulama null nesneye erişmeye çalıştığında NullPointerException oluşur veya bir uygulama uyumsuz sınıf türlerini yayınlamaya çalıştığında ClassCastException oluşur.
Java API'dan bir Hata ve Kural Dışı Durumun temsil ettiği oldukça iyi bir özet:
Hata, makul bir uygulamanın yakalamaya çalışmaması gereken ciddi sorunları gösteren Throwable'ın bir alt sınıfıdır. Bu tür hataların çoğu anormal durumlardır. ThreadDeath hatası, "normal" bir durum olsa da, çoğu uygulama tarafından yakalanmaya çalışılmaması gerektiği için bir Hata alt sınıfıdır.
Yöntemin yürütülmesi sırasında atılabilecek ancak yakalanamayan Hata alt sınıflarını çalıştırmak için bir yöntemin bildirilmesine gerek yoktur, çünkü bu hatalar asla oluşmaması gereken anormal durumlardır.
OTOH, İstisnalar için Java API diyor:
İstisna sınıfı ve alt sınıfları, makul bir uygulamanın yakalamak isteyebileceği koşulları gösteren bir Atılabilir biçimidir.
Hatalar, uygulamanızın veya programınızın çalıştığı ortamdan kaynaklanır. Çoğu zaman, uygulamanız veya programınız sona erdiğinden ondan kurtaramayabilirsiniz. Javadoc, JVM gibi ortamlarda bu tür hataları yine de bırakacağından bu tür hataları yakalamamanızı tavsiye etti.
Örnekler:
VirtualMachineError
- Java Sanal Makinesinin bozulduğunu veya çalışmaya devam edebilmesi için gerekli kaynakların tükendiğini belirtmek için atılmıştır.
OutOfMemoryError
JVM'nin belleği StackOverflowError
dolduğunda veya
yığın bittiğinde oluşur.
İstisnalar uygulamanızın veya programınızın kendisinden kaynaklanır; belki kendi hatanız yüzünden. Çoğu zaman ondan kurtarabilirsiniz ve uygulamanız yine de çalışmaya devam eder. Uygulamanızın veya programınızın anormal olarak sonlandırılmasını önlemek ve / veya istisna mesajını özelleştirebilmek için bu tür hataları yakalamanız önerilir, böylece kullanıcılar her yere dağılmış varsayılan çirkin istisna mesajlar yerine güzel biçimlendirilmiş bir mesaj görürler.
Örnekler:
NullPointerException
bir uygulama null nesneye erişmeye çalıştığında oluşur. veya Var olmayan bir dizine sahip bir diziye erişmeye çalışmak veya yanlış veri veya parametrelere sahip bir işlevi çağırmak.
Unchecked exceptions != RuntimeExceptions
;Unchecked exceptions = RuntimeExceptions + Errors
. Soruyu gündeme getirdiğini biliyorum: Hata bir istisna mı? , ama yazdıkları bu. İşte bu örneklerden sadece bir tanesi: docs.oracle.com/javase/tutorial/essential/exceptions/… .