Java: kontrol vs denetlenmeyen özel durum açıklaması
Kontrol vs denetlenmeyen istisnalar hakkında StackOverFlow üzerinde çok yazı okudum. Açıkçası hala tam doğru kullanmayı eminim.
". Joshua Bloch ^em>Etkili Java< . em ^/ " dedi
Kontrol özel durumlar için kullanın kurtarılabilir Koşulları ve zamanı programlama hataları için istisnalar (2. Baskı madde 58)
Eğer doğru anladıysam görelim
Burada işaretli bir durum benim anladığım:
try{
String userInput = //read in user input
Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
id = 0; //recover the situation by set the id to 0
}
1. Yukarıdaki işaretli bir durum düşünün.
2. RuntimeException kontrolsüz bir istisna mı?
Burada kontrolsüz bir istisna benim anlayış
try{
File file = new File("my/file/path");
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//3. What should I do here?
//Should I "throw new FileNotFoundException("File not found");"?
//Should I log?
//Or should I System.exit(0);?
}
4. Şimdi, yukarıdaki kodu kontrol edemedim de bir istisna mı? Bu gibi durumu kurtarmak için deneyebilirsiniz? Miyim?(Not: benim 3 soru catch
yukarıdaki) içinde
try{
String filePath = //read in from user input file path
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//Kindly prompt the user an error message
//Somehow ask the user to re-enter the file path.
}
5. İnsanlar neden böyle?
public void someMethod throws Exception{
}
Neden istisna balonun izin veriyorlar mı? İşleme hatası er daha iyi değil mi? Neden kabarcık Yukarı?
EDİT: tam istisna kabarcık veya özel Durum kullanarak maske kullanmalıyım?
Aşağıda benim okumalar
In Java, when should I create a checked exception, and when should it be a runtime exception?
CEVAP
Birçok kişi kontrol istisnalar (açıkça veya yeniden oluşturma yakalamak gereken bu yani hiç kullanılmaması gerektiğini söylüyorlar. C elendiler# örneğin, ve en dilde yok. Her zaman RuntimeException
(kontrolsüz durum) bir alt sınıfı atabilirsiniz
Ancak, kontrol istisnalar yararlıdır - API kullanıcı istisnai durum kurtarılabilir eğer varsa) nasıl ele düşünmek için zorlamak için istediğiniz zaman kullanılır bence. İnsanlar onlardan nefret yapar kontrol istisnalar Java platformunda gereksiz olduğunu.
Here's my extended view on the topic.
Özel sorular için
- Hayır.
NumberFormatException
kontrolsüz (=RuntimeException
alt sınıfıdır). Neden? Bilmiyorum. (ama orada bir yöntem 12**) olmalıydı - Evet, tam olarak
Bu kodu nerede ve ne istediğinizi bağlıdır. Eğer UI katmanında ise - onu yakalamak ve bir uyarı gösterir; eğer hizmet katmanı - hiç aramıyorsun - eğer kabarcık edelim. Sadece bu durum yutma. Eğer özel bir durum çoğu zaman ortaya çıkarsa bunlardan birini seçmeniz gerekir:
- ve dönüş günlük
- (bu yöntemi tarafından atılan bildirmek) yeniden oluşturma
- kurucu geçerli geçerek yeni bir durum oluşturmak
Olabilirdi. Ama hiçbir şey bu kadar iyi denetlenmeyen istisnalarını sizi durdurur
- İnsanları yakalamak ve yeniden oluşturma için ne düşünün için tembel çünkü çoğu zaman -.
Exception
atma kötü bir uygulamadır ve kaçınılmalıdır.
Ne yazık ki, seni yakalamak zaman, yeniden oluşturma için, kontrol kullanma ve denetlenmeyen istisnalar ne zaman kullanılacağını belirlemek için tek kural yok. Bu kadar karışıklık ve kötü kod bir sürü neden olur katılıyorum. Genel prensip Bloch (bir kısmı alıntı) tarafından belirtilmiştir. Genel prensip kontrol edebileceğiniz bir katman için bir istisna yeniden oluşturma.
Özel durum yakalandı Java değil mi?...
Özel durum açıklaması ve yığın bir ist...
Java özel durum sınıfı tanımlamak için...
Bir tablo MySQL kontrol bir özel durum...
java arasındaki fark.lang.RuntimeExcep...