Javaカスタム例外の例
Javaでは、チェック例外と未チェック例外の2種類の例外があります。要約は以下のとおりです:
-
Checked
– 回復可能な状態のために `java.lang.Exception`を拡張し、
明示的に例外をキャッチし、エラーをコンパイルしてください。
-
チェックされていない
– 回復不能のために `java.lang.RuntimeException`を拡張する
条件は、プログラミングエラーのように、try-catch、実行時エラーの必要はありません。
1.カスタムチェック例外
1.1クライアントが例外から回復できる場合は、それをチェック例外にします。カスタムチェック例外を作成するには、 `java.lang.Exception`を拡張します。
NameNotFoundException.java
package com.mkyong.examples.exception; public class NameNotFoundException extends Exception { public NameNotFoundException(String message) { super(message); } }
1.2チェック例外については、例外をキャッチして捕捉する必要があります。
CustomerService.java
package com.mkyong.examples; import com.mkyong.examples.exception.NameNotFoundException; public class CustomerService { public Customer findByName(String name) throws NameNotFoundException { if ("".equals(name)) { throw new NameNotFoundException("Name is empty!"); } return new Customer(name); } public static void main(String[]args) { CustomerService obj = new CustomerService(); try { Customer cus = obj.findByName(""); } catch (NameNotFoundException e) { e.printStackTrace(); } } }
出力
com.mkyong.examples.exception.NameNotFoundException: Name is empty! at com.mkyong.examples.CustomerService.findByName(CustomerService.java:10) at com.mkyong.examples.CustomerService.main(CustomerService.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
2.カスタム未チェック例外
-
注意** チェックされていない一般的な例外:
NullPointerException
、` IndexOutOfBoundsException`、
IllegalArgumentException
2.1クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。チェックされていないカスタム例外を作成するには、 `java.lang.RuntimeException`を拡張します。
ListTooLargeException.java
package com.mkyong.examples.exception; public class ListTooLargeException extends RuntimeException{ public ListTooLargeException(String message) { super(message); } }
2.3チェックされていない例外については、例外をキャッチしてみてください。
CustomerService.java
package com.mkyong.examples; import com.mkyong.examples.exception.ListTooLargeException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CustomerService { public void analyze(List<String> data) { if (data.size() > 50) { //runtime exception throw new ListTooLargeException("List can't exceed 50 items!"); } //... } public static void main(String[]args) { CustomerService obj = new CustomerService(); //create 100 size List<String> data = new ArrayList<>(Collections.nCopies(100, "mkyong")); obj.analyze(data); } }
出力
Exception in thread "main" com.mkyong.examples.exception.ListTooLargeException: List can't exceed 50 items! at com.mkyong.examples.CustomerService.analyze(CustomerService.java:25) at com.mkyong.examples.CustomerService.main(CustomerService.java:38) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
参考文献
例外 – 論争]。
http://stackoverflow.com/questions/2190161/difference-between-java-lang-runtimeexception-and-java-lang-exception
[difference
java.lang.RuntimeExceptionとjava.lang.Exceptionの間]
例外
リンク://タグ/java/[java]