Haklısın.
Kontrol edilmeyen istisnalar , sistemin hızlı bir şekilde başarısız olmasına izin vermek için kullanılır , bu iyi bir şeydir. Düzgün çalışması için yönteminizin ne beklediğini açıkça belirtmelisiniz. Bu şekilde girişi yalnızca bir kez doğrulayabilirsiniz.
Örneğin:
/**
* @params operation - The operation to execute.
* @throws IllegalArgumentException if the operation is "exit"
*/
public final void execute( String operation ) {
if( "exit".equals(operation)){
throw new IllegalArgumentException("I told you not to...");
}
this.operation = operation;
.....
}
private void secretCode(){
// we perform the operation.
// at this point the opreation was validated already.
// so we don't worry that operation is "exit"
.....
}
Sadece bir örnek vermek gerekirse. Mesele şu ki, sistem hızlı bir şekilde başarısız olursa, nerede ve neden başarısız olduğunu bileceksiniz. Aşağıdaki gibi bir yığın izlemesi alacaksınız:
IllegalArgumentException: I told you not to use "exit"
at some.package.AClass.execute(Aclass.java:5)
at otherPackage.Otherlass.delegateTheWork(OtherClass.java:4569)
ar ......
Ve ne olduğunu bileceksin. "DelegateTheWork" yöntemindeki (4569 satırındaki) OtherClass, sınıfınızı "çıkış" değeriyle çağırdı, hatta olmamalıdır.
Aksi takdirde, kodunuzun her yerine doğrulamaları serpin ve bu hataya açık. Artı, bazen neyin yanlış gittiğini izlemek zordur ve saatlerce sinir bozucu hata ayıklama bekleyebilirsiniz
Aynı şey NullPointerExceptions için de geçerlidir. 15 özniteliğe sahip 700 satırlık bir sınıfınız varsa, 30 özniteliği kullanır ve bunlardan hiçbiri null olamaz. fabrika yöntemi.
public static MyClass createInstane( Object data1, Object data2 /* etc */ ){
if( data1 == null ){ throw NullPointerException( "data1 cannot be null"); }
}
// the rest of the methods don't validate data1 anymore.
public void method1(){ // don't worry, nothing is null
....
}
public void method2(){ // don't worry, nothing is null
....
}
public void method3(){ // don't worry, nothing is null
....
}
Kontrol edilen istisnalar Programcı (siz veya iş arkadaşlarınız) her şeyi doğru yaptığında, girdiyi doğruladığında, testleri çalıştırdığında ve tüm kod mükemmel olduğunda, ancak kod kapalı olabilecek bir üçüncü taraf web hizmetine bağlandığında (veya bir dosyada) kullanışlıdır. kullandığınız harici bir işlem vb. tarafından silindi). Web hizmeti, bağlantı denenmeden önce doğrulanabilir, ancak veri aktarımı sırasında bir şeyler ters gitti.
Bu senaryoda sizin veya iş arkadaşlarınızın yardım etmek için yapabileceği hiçbir şey yoktur. Ama yine de bir şey yapmalı ve uygulamanın ölmesine ve kullanıcının gözünde kaybolmasına izin vermemelisiniz. Bunun için işaretli bir istisna kullanırsınız ve istisnayı işlersiniz, bu olduğunda ne yapabilirsiniz ?, çoğu zaman, sadece hatayı günlüğe kaydetmek, muhtemelen işinizi kaydetmek (uygulama çalışması) ve kullanıcıya bir mesaj sunmak için . (Site blabla kapalı, lütfen daha sonra tekrar deneyin vb.)
İşaretli istisna aşırı kullanılırsa (tüm yöntem imzalarına "istisna atma" ekleyerek), kodunuz çok kırılgan olacaktır, çünkü herkes bu istisnayı görmezden gelecektir (çünkü çok geneldir) ve kod kalitesi ciddi olacaktır sınırlı.
Denetlenmeyen istisnayı aşırı kullanırsanız, benzer bir şey olur. Bu kodun kullanıcıları bir şeylerin yanlış gidebileceğini bilmiyorlar, bir çok deneme {...} catch (Throwable t) görünecek.