Etkili Java< . em ^/ " dediKontrol özel durumlar için kullanınkurtarılabilir Koşulları ve zamanıprogramlama hataları " /> Etkili Java< . em ^/ " dediKontrol özel durumlar için kullanınkurtarılabilir Koşulları ve zamanıprogramlama hataları " />
SORU
24 Mayıs 2011, Salı


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?

When to choose checked and unchecked exceptions

CEVAP
24 Mayıs 2011, Salı


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

  1. Hayır. NumberFormatException kontrolsüz (=RuntimeException alt sınıfıdır). Neden? Bilmiyorum. (ama orada bir yöntem 12**) olmalıydı
  2. Evet, tam olarak
  3. 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
  4. Olabilirdi. Ama hiçbir şey bu kadar iyi denetlenmeyen istisnalarını sizi durdurur

  5. İ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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • David Wills

    David Wills

    31 Aralık 2007
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009