Java'da, exceptions
istisnayı tek tek yakalamak yerine hepsini elde etmenin (yakalama) bir yolu var mı?
Java'da, exceptions
istisnayı tek tek yakalamak yerine hepsini elde etmenin (yakalama) bir yolu var mı?
Yanıtlar:
İsterseniz yöntemlerinize atma cümleleri ekleyebilirsiniz. O zaman kontrol edilen yöntemleri hemen yakalamanıza gerek kalmaz. Bu şekilde exceptions
daha sonrasını yakalayabilirsiniz (belki diğeriyle aynı anda exceptions
).
Kod şöyle görünür:
public void someMethode() throws SomeCheckedException {
// code
}
Daha sonra exceptions
onlarla bu yöntemle uğraşmak istemezseniz başa çıkabilirsiniz .
Tüm istisnaları yakalamak için bazı kod bloklarını atabilirsiniz: (Bu, Exceptions
kendi yazdığınız anlamına da gelir )
try {
// exceptional block of code ...
// ...
} catch (Exception e){
// Deal with e as you please.
//e may be any type of exception at all.
}
Çalışmasının nedeni Exception
, tüm istisnalar için temel sınıf olmasıdır. Bu nedenle, atılabilecek herhangi bir istisna bir Exception
(Büyük 'E' harfidir).
Kendi istisnalarınızı işlemek istiyorsanız, catch
önce genel İstisna birinden önce bir blok ekleyin .
try{
}catch(MyOwnException me){
}catch(Exception e){
}
Ham bir İstisnayı yakalamanın iyi bir tarz olmadığını kabul etsem de, üstün kayıt tutma ve beklenmedik durumlarla başa çıkma yeteneği sağlayan istisnaları ele almanın yolları vardır. Olağanüstü bir durumda olduğunuz için, muhtemelen yanıt süresinden çok iyi bilgi almakla ilgileniyorsunuzdur, bu nedenle performans örneği büyük bir hit olmamalıdır.
try{
// IO code
} catch (Exception e){
if(e instanceof IOException){
// handle this exception type
} else if (e instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this one. What could it be? Let's log it, and let it bubble up the hierarchy.
throw e;
}
}
Ancak, bu, GÇ'nin de Hata atabileceği gerçeğini dikkate almaz. Hatalar İstisna değildir. Hatalar, her ikisi de Throwable temel sınıfını paylaşsa da, Exceptions'dan farklı bir miras hiyerarşisi altındadır. IO, Hata atabileceğinden, Atılabilirliği yakalayacak kadar ileri gitmek isteyebilirsiniz.
try{
// IO code
} catch (Throwable t){
if(t instanceof Exception){
if(t instanceof IOException){
// handle this exception type
} else if (t instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this Exception. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else if (t instanceof Error){
if(t instanceof IOError){
// handle this Error
} else if (t instanceof AnotherError){
//handle different Error
} else {
// We didn't expect this Error. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else {
// This should never be reached, unless you have subclassed Throwable for your own purposes.
throw t;
}
}
Temel istisna olan 'İstisna'yı yakalayın
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
Bu yakalamak için kötü bir uygulamadır İstisna çok geniş Sadece, ve bir gibi bir şey kaçırabilir - NullPointerException kendi kodunuzu.
Çoğu dosya işlemi için IOException kök istisnadır. Bunun yerine onu yakalamak daha iyi.
Evet var.
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
Tek yakalama bloğunda birden fazla istisna yakalayabilirsiniz.
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}
Sadece belirli İstisnaların aksine fırlatılan Exception
herhangi bir türden herhangi birini yakalamak mı istiyorsunuz ?
Öyleyse:
try {
//...file IO...
} catch(Exception e) {
//...do stuff with e, such as check its type or log it...
}