Yukarıdaki gibi bir kod olması iyi midir?Deneme işlemini durdurma sonunda sonunda bloke edin son olarak blok
cevap
Evet, bunu yapabilirsiniz.
InputStream in = /* ... */;
try {
} catch (...) {
} finally {
try {
in.close();
} catch (...) {
} finally {
}
}
Bunun için kötü bir uygulama
+1 için iyi bir örnek – Alp
İyi örnek. Ancak bunu her zaman çok okunabilir kod olarak kabul ediyorum ve boş çek ile Kapanabilir örnekleri kapatabilecek bazı kullanım yöntemi veya sınıf oluşturmaya çalışıyorum. –
Çirkin görünüyor ama bazen gitmenin yolu. Koduna bağlı olarak, ikinci try-catch-finally bloğu ile bir yöntem çıkarmayı düşünün.
Mümkün olduğunda bunu önlemek en iyisidir, ancak bazen gerekli olabilir. Bize neden ihtiyacınız olduğunu düşündüğünüz hakkında daha fazla bilgi verirseniz, daha iyi yanıtlar verebiliriz :-)
Taahhüd işleminin kendisinde olabileceği düşünülmesinin nedenlerinden biri, finally
satırında bir işlem yapmak olabilir. bir istisna atmak.
Son olarak bir bloğun içine atılan istisnaların, düzgün şekilde ele alınmadıkça, daha önce atılan istisnalar için try
bloğu içinde kolayca gölgelenebileceğini unutmayın. Böylece, bu tür yuvalanmış deneme/yakalama blokları bazen gitmek için yoldur. Ancak, diğerlerinin de hatırlayabildiği gibi, okunabilirliği arttırmak için, finally
bloğunun iç kısımlarının ayrı bir yönteme çıkarılması tavsiye edilir.
olurdu her türlü durumu görmüyorum:
Aslında, hatta düzgün kapatmak istiyor akışları ile uğraşırken bunu yapmak için gerekli olan okunabilirliği sen gibi ayrı bir yönteme de iç içe try-catch çarpanlarına olabilir:
try{
}catch(){}
finally{
cleanup();
}
Ve ikinci try-catch temizleme yöntemi içinde olabilir.
IO paketinde yukarıdaki kalıbı desteklemek için java6 aşağıdaki gibi tek bir temizleme yöntemi olabilir, böylece tüm akarsular, uygulamak olduğunu Kapatılabilir denilen yeni bir sınıf tanıttı: Bu çirkinpublic static boolean cleanup(Closeable stream)
{
try{
stream.close();
return true;
}catch(){
return false;
}
}
ama orada Bu durumdan kaçınamayacağınız durumlar, özellikle kaynaklarda temiz kaynaklara sahip olduğunuz ve tek bir kaynağın temizlenebileceği bir istisna oluşturabilir.
Tipik bir örnek, JDBC kodundaki ResultSet, Statement ve Connection nesnelerini topluyor. ResultSet'in kapatılması bir istisna oluşturabilir, ancak yine de devam etmek ve Bildirim ve Bağlantıyı kapatmak istiyoruz.
- 1. Sonunda bir blok içerisinden istisna
- 2. Sonunda
- 3. Bir CSS3 animasyonu sonunda son durumu sürdürme
- 4. [] sonunda sunucusunda bu alma
- 5. Sonunda bir deneme/yakalama yapmak için tamam mı?
- 6. Kaydırma çubuğunun sonunda dönmesi için önyükleme kaydırma karuseli durdurma
- 7. Perl semiklonu, ifadenin sonunda
- 8. android append '...' sonunda textview
- 9. Pencerenin sonunda mouseup nasıl algılanır?
- 10. Dize sonunda sayı nasıl alınır?
- 11. Sonunda belirli bir süre geçtikten sonra son noktaya git
- 12. Her satırın sonunda dolar işareti
- 13. Webview'ın sonunda bir görünüm ekleyin
- 14. Animasyon sonunda etkinlik nasıl başlatılır
- 15. 404 sayfa dosyanın sonunda url
- 16. PHP Bu kodu vardır sonunda
- 17. Bloke eden bir evde okuma okumasını durdurma
- 18. Dizinin sonunda ampersan ve prepended var_dump
- 19. python: dizgeyi yalnızca dizenin sonunda kaldır
- 20. Dizenin sonunda dizeyle doğru dizgi birleştirmek nasıl?
- 21. vim artımlı arama dosyası sonunda durma
- 22. Derleme arabellek noktasını sonunda nasıl bulabilirim?
- 23. Video.js: Ben videonun sonunda büyük oynat düğmesini göstermek istiyorum, bu yüzden kullanıcı kolayca yeniden oynatabilir sonunda
- 24. Neden mcrypt_encrypt() dizgemin sonunda ikili karakterleri koyar?
- 25. Sayfanın sonunda yeni bir sayfa yükleyin
- 26. Metin girişinin sonunda imleci girin giriş
- 27. Guice'de kapsamın sonunda kaynakların otomatik olarak temizlenmesi mümkün mü?
- 28. Komut dosyası yürütme sonunda otomatik olarak nasıl silinir?
- 29. nasıl otomatik olarak bir sonraki düğmesi yoktur Sonunda" Ben önümüzdeki
- 30. Sonunda sonuç almak için yöntemler nasıl zincirlenir?
Belki de şunu okuyun: http://stackoverflow.com/questions/1335812/try-catch-finally-and-then iyi örnek – planetjones