2010-11-20 10 views
12

Olası Çoğalt:
In Java, when should I create a checked exception, and when should it be a runtime exception?RuntimeException'ın uygun kullanımı?

Ben RuntimeException yerine Exception bir istisnanız türetmek gerekir?

A RuntimeException olabilen bir yöntemin throws fıkrada beyan edilmesi gerekmez iyi açıkça bir ilan etmek iyi bir uygulamadır çünkü kötü özellikle listelenen zorunda ya olmadığından yöntemin istisnası.

Düşünceler?

+2

Yinelenen http://stackoverflow.com/questions/499437/in-java-when-should-i-create-a-checked-exception-and-when-should-it-be-a-runtim –

cevap

43

:

bir istemci makul bir özel kurtarmak için beklenebilir Eğer

, bu bir kontrol istisna yapmak. Bir istemci , istisnasından kurtarmak için hiçbir şey yapamazsa, işaretlenmemiş bir istisnası yapın. denetlenmeyen özel bir RuntimeException türetilir ve bir kontrol durum Exception birinden türetilmiş olduğu

not edin.

İstemci bir istisnadan kurtulmak için herhangi bir şey yapamazsa neden bir RuntimeException atar?Makalede de belirtildiği:

Süre istisnalar onlardan kurtarmak veya herhangi onları işlemek için bir programlama sorunun sonucudur sorunlar temsil eder ve örneğin, API istemci kod makul beklenen edilemez yol. Bu gibi problemler aritmetik istisnaları içerir, örneğin sıfıra bölünür; işaretçi istisnası, nesnesine boş bir başvuruyla erişmeye çalışmak gibi ; ve girişimi gibi bir endekslemesi, bir dizi öğesine çok büyük veya çok küçük bir dizinine erişme gibi.

8

aşağıdaki yerine İstisna RuntimeException kullanacağı kurumsal uygulama geliştirme birçok durum oldukça yaygın olan iki tür senaryolar vardır şunlardır:

  • iken endişe tasarım prensibi ayıran (bir yönü olarak İstisna işleme uygulanması), çoğu modern gün çerçevelerinde, bildirimleri istisna olarak ele alır ve sabit kodlamadan ziyade belirli istisna işleme bloklarını ilişkilendirirsiniz. Bunun iyi bir örneği, Spring içindeki tüm SQL istisnalarını RuntimeException'a dönüştüren JDBC şablonudur, böylece geliştirici veri erişim mantığını yazarken try catch bloklarını yazmaz. dev env'de farklı davranışlar sağlayabilen istisna işleyicisini deklaratif olarak tanımlayabilirsiniz. ve üretimde farklı davranışlar. Benzer uygulama Struts 1.x Eylem sınıfında da vardır, burada yürütme yöntemi İstisna'yı atmak için bildirilir ve özel istisnaların üstesinden gelmek için struts-config içinde eşlenen ayrı bir ExceptionHandler vardır. Bu RuntimeException örneği olmasa da, tasarım ilkesi normal yürütme ve istisna işleme endişesini ayırmak için aynıdır.
  • RuntimeException'ın başka bir kullanımı EJB'de ve işlemlerin konteynır tarafından denetlendiği diğer İşlem Yöneticilerindedir. Kongre tarafından bu tür kaplarda size işlem geri alma olur Kodunuzdaki içinden RuntimeException atarsam - Eğer Bu diğer senaryolar olacağını hemen aklıma gelen 2 senaryo aşağıda istisna

atarsam aynı olmayacaktı of- elbette. Unchecked Exceptions -- The Controversy itibaren