Java 当我使用抛出时,调用方法不要求处理异常

Java 当我使用抛出时,调用方法不要求处理异常,java,throws,Java,Throws,在这里,当我要从其他不要求我处理异常的地方调用这个方法时,我使用了抛出方法签名 public class Exception { int a, b, c; void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException { a = Integer.parseInt(data[0]);//convert the string int

在这里,当我要从其他不要求我处理异常的地方调用这个方法时,我使用了抛出方法签名

 public class Exception {

        int a, b, c;

        void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException {
            a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12)  eg2.("df23" ---> fail)
            b = Integer.parseInt(data[1]);
            c = 0;
        }

        void divide() throws ArithmeticException {
            c = a / b;
        }

        void disp() {
            System.out.println(a + " / " + b + " = " + c);
        }
    }
当我要从其他地方调用这个方法时,它不会要求我处理异常

是的,因为两者都是陷阱,不能被抓住

阅读java教程中关于

有时您会看到像您的方法一样声明
RuntimeException
s的方法。这是一种记录可能抛出的异常的方法,即使您没有捕获它们

除了用户3168013的评论


我们如何才能将未检查的异常转换为已检查的异常

每个例外都有其原因。原因是导致它的另一个例外。如果没有原因,则为根异常。因此,您可以创建一个已检查异常的实例,将未检查异常作为其原因传递给它,并抛出已检查的预期

例如,定义选中的异常

public class DataFormatException extends Exception {
    public DataFormatException(Throwable cause) {
        super(cause);
    }
}
然后扔掉你自己的

void set(String data[]) throws DataFormatException {
    try {
        a = Integer.parseInt(data[0]);// convert the string into int.
                                        // eg1.("12"
                                        // ---> 12) eg2.("df23" ---> fail)
        b = Integer.parseInt(data[1]);
        c = 0;
    } catch (NumberFormatException e) {
        throw new DataFormatException(e);
    } catch (ArrayIndexOutOfBoundsException e) {
        throw new DataFormatException(e);
    }
}
当然,最好根据原因给出详细的异常消息,但这只是一个简短的示例

当我要从其他地方调用这个方法时,它不会要求我处理异常

是的,因为两者都是陷阱,不能被抓住

阅读java教程中关于

有时您会看到像您的方法一样声明
RuntimeException
s的方法。这是一种记录可能抛出的异常的方法,即使您没有捕获它们

除了用户3168013的评论


我们如何才能将未检查的异常转换为已检查的异常

每个例外都有其原因。原因是导致它的另一个例外。如果没有原因,则为根异常。因此,您可以创建一个已检查异常的实例,将未检查异常作为其原因传递给它,并抛出已检查的预期

例如,定义选中的异常

public class DataFormatException extends Exception {
    public DataFormatException(Throwable cause) {
        super(cause);
    }
}
然后扔掉你自己的

void set(String data[]) throws DataFormatException {
    try {
        a = Integer.parseInt(data[0]);// convert the string into int.
                                        // eg1.("12"
                                        // ---> 12) eg2.("df23" ---> fail)
        b = Integer.parseInt(data[1]);
        c = 0;
    } catch (NumberFormatException e) {
        throw new DataFormatException(e);
    } catch (ArrayIndexOutOfBoundsException e) {
        throw new DataFormatException(e);
    }
}

当然,最好根据原因给出详细的异常消息,但这只是一个简短的示例。

两个异常都是
未检查的异常。未检查的异常在运行时处理

它由开发人员选择如何处理或不处理运行时异常,编译器从不强迫您处理


查找有关处理的详细信息。

两个异常都是
未检查的异常
。未检查的异常在运行时处理

它由开发人员选择如何处理或不处理运行时异常,编译器从不强迫您处理


查找有关处理的详细信息。

类用户将如何了解运行时异常以及如何处理它。您可以使用与已检查异常相同的方法来处理它们。使用try/catch。如果您告诉类用户(javadoc或在方法签名中声明它们),类用户将只知道您的方法抛出了RuntimeException。我建议您阅读“我可以使用throw处理异常吗?”一文。我们如何才能将未检查的异常转换为已检查的异常。@user3168013我已更新了答案。希望这会有所帮助。类用户将如何了解运行时异常以及如何处理它。您可以使用与检查异常相同的方法来处理它们。使用try/catch。如果您告诉类用户(javadoc或在方法签名中声明它们),类用户将只知道您的方法抛出了RuntimeException。我建议您阅读“我可以使用throw处理异常吗?”一文。我们如何才能将未检查的异常转换为已检查的异常。@user3168013我已更新了答案。希望有帮助。