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.
ErrorJavaDoc 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 NullPointerExceptionveya yasadışı bir argüman gibi bir programlama hatası . Uygulamalar bazen bu Throwablekategoriden yararlanabilir veya kurtarabilir - veya en azından Konu run()yönteminde yakalayabilir , şikayeti kaydedebilir ve çalışmaya devam edebilir.FileNotFoundExceptionve 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 -
Errorjava s türündedir java.lang.Error.Errorçalışma zamanında olur. Derleyici tarafından bilinmeyeceklerdir. Errors çoğunlukla uygulamanın çalıştığı ortamdan kaynaklanır. java.lang.StackOverflowError ,java.lang.OutOfMemoryErrorExceptionjava s türündedir java.lang.Exception.Exceptions hem işaretli hem de işaretsiz tip içerir.try-catchbloklar aracılığıyla işleyerek kurtarabilirsiniz .Exceptions çoğunlukla uygulamanın kendisinden kaynaklanır.SQLException, IOException ArrayIndexOutOfBoundException, ClassCastException,NullPointerExceptiondaha fazla okuma: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

ErrorSınıfın açıklaması oldukça açıktır:
An
Error,Throwablemakul 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.ThreadDeathHata, "normal" bir durum olsa da, aynı zamanda bir alt sınıfıdırErroruygulamaların çoğu bunu yakalamaya çalışmamalıdır çünkü.Yöntemin
Erroryü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 Exceptiondiğ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.Exceptionve arasında birkaç benzerlik ve farklılık vardır java.lang.Error.
benzerlikler:
İlk - Her iki sınıfları uzanır java.lang.Throwableve bu şekilde hataları ile uğraşırken yaygındır yöntemlerin birçoğu sonucunda devralır kullanılacak: getMessage, getStackTrace, printStackTracevb.
İkincisi, java.lang.Throwableher 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) throwsanahtar kelime kullanılarak yöntem istisnaları listesinde bildirilebilir . İşbu beyan sadece gerekli java.lang.Exceptionve alt sınıfları için java.lang.Throwable, java.lang.Errorve java.lang.RuntimeExceptionve bunların alt sınıfları da isteğe bağlıdır.
java.lang.ThrowableBu catchmaddede 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.Errorve java.lang.Exceptionyöntem başlığında bildirilebilir, catchyan tümce olabilir, anahtar sözcük ile kullanılabilir throw.
farklılıklar:
İlk - kavramsal fark: java.lang.ErrorJVM 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.Throwablehalef 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.Errorve java.lang.Exceptionilk bir olarak kabul kontrolsüz derleme zamanı istisna kontrolü için istisna. Sonuç kodu atma java.lang.Errorveya alt sınıfları, yöntem başlığında bu hatayı bildirmek zorunda değildir. java.lang.ExceptionYö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.
OutOfMemoryErrorJVM'nin belleği StackOverflowErrordolduğ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:
NullPointerExceptionbir 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/… .