Java抛出自定义错误

时间:2015-05-04 15:43:47

标签: java error-handling try-catch

所以我现在已经使用Java了一段时间。从技术上讲,我对这门语言还是新手。

我为我正在处理的个人项目创建了一些自定义错误,我想知道是否还有使用抛出这些错误的方法而不包围try-catch块?

抛出这些错误的方法得到了很好的使用,并且不应该尝试每个单独的语句。

任何刚接触过Java的人和/或没有阅读过文档的人都不会知道这个问题。

有没有办法运行这些方法而不必每个try,以及记录这些错误的正确方法是什么?

4 个答案:

答案 0 :(得分:4)

Java提供了两种类型的例外:Checked和Unchecked。

检查一次是编译器会提示你处理的那些(在try-catch块中),而对于未经检查的异常,编译器不会要求你处理它们。

RuntimeException类是未经检查的异常的顶级类,因此如果您的自定义异常类扩展了RuntimeException类,那么自动编译器将不会提示您在try-catch块中显式处理它们。

基本上RuntimeExceptions是java认为在执行时发生的那些,并且在执行时发生的任何事情都像NullPointerException一样无法处理,因此我们在编译时无法做很多事情。

答案 1 :(得分:1)

使您的自定义异常扩展RuntimeException类。根据定义,这些不需要声明为从方法抛出,并且不需要被调用该方法的任何人捕获..

请参阅Javadocs RuntimeException

答案 2 :(得分:1)

如果您不想强制您的代码将这些方法包装在try块中,为什么还要让它们抛出异常?

让我们考虑一下这些方法:

public void badMethodOne() throws CustomExceptionOne;
public void badMethodTwo() throws CustomExceptionTwo;

您问的是如何避免这种情况:

public void myMethod(){
   try{
      badMethodOne();
   }
   catch(CustomExceptionOne ex){
      ex.printStackTrace();
   }

   try{
      badMethodTwo();
   }
   catch(CustomExceptionTwo ex){
      ex.printStackTrace();
   }

}

一种选择是简单地捕获超类异常:

public void myMethod(){
   try{
      badMethodOne();
      badMethodTwo();
   }
   catch(Exception ex){
      ex.printStackTrace();
   }

}

您也可以使用多捕获块:

public void myMethod(){
   try{
      badMethodOne();
      badMethodTwo();
   }
   catch(CustomExceptionOne | CustomExceptionTwo ex){
      ex.printStackTrace();
   }
}

你也可以将责任推到“链上”,让任何调用你代码的人处理try / catch:

public void myMethod() throws CustomExceptionOne, CustomExceptionTwo{
      badMethodOne();
      badMethodTwo();
}

答案 3 :(得分:-1)

您可以捕获异常或可投掷

基本上你只需要捕获抛出的异常类型的超类,因为大多数异常都是Exception的子类,Throwable几乎都会捕获所有内容。

此外,不需要在编译时处理RuntimeException。我确定你知道的是NullPointerExceptions,它们是RuntimeExceptions。将它们放在代码中并不是一个好习惯,但如果必须的话。

最好的方法是在代码中处理异常。

编辑:你真的只需要一个try和catch块就可以使用throws关键字来传递更多上游的异常处理,你可以在那里处理它,可能只是一个try catch块