Javaカスタム例外の例

java-custom-exception、width = 779、height = 216

Javaでは、チェック例外と未チェック例外の2種類の例外があります。要約は以下のとおりです:

  1. Checked - 回復可能な状態のために `java.lang.Exception`を拡張し、

明示的に例外をキャッチし、エラーをコンパイルしてください。

  1. チェックされていない - 回復不能のために `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)

参考文献

java.lang.RuntimeExceptionとjava.lang.Exceptionの間]

例外 リンク://タグ/java/[java]