Java抛出自定义错误

Java抛出自定义错误,java,error-handling,try-catch,Java,Error Handling,Try Catch,因此,我已经使用Java有一段时间了。从技术上讲,我对这门语言还是新手 我为我正在处理的一个个人项目创建了几个自定义错误,我想知道是否有任何方法可以在不包装try-catch块的情况下抛出这些错误 抛出这些错误的方法得到了广泛的使用,不必尝试每个单独的语句 这也是一个Java新手和/或未阅读文档的人都不知道的问题 是否有任何方法可以运行这些方法而不必尝试每种方法,记录这些错误的正确方法是什么?使自定义异常扩展RuntimeException类。根据定义,这些不需要声明为从方法抛出,也不需要被调用

因此,我已经使用Java有一段时间了。从技术上讲,我对这门语言还是新手

我为我正在处理的一个个人项目创建了几个自定义错误,我想知道是否有任何方法可以在不包装
try-catch
块的情况下抛出这些错误

抛出这些错误的方法得到了广泛的使用,不必尝试每个单独的语句

这也是一个Java新手和/或未阅读文档的人都不知道的问题


是否有任何方法可以运行这些方法而不必尝试每种方法,记录这些错误的正确方法是什么?

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


请参阅Javadocs。

您可以捕获异常或可丢弃

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

此外,不需要在编译时处理RuntimeException。我相信您知道的一个是NullPointerException,它们是RuntimeException。在代码中包含它们不是一个好的实践,但如果必须的话

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


编辑:您实际上只需要一个try-and-catch块,您可以使用throws关键字将异常处理传递到更上游的位置,在您的情况下,您可以在那里处理它可能只需要一个try-catch块

如果您不想强制代码将这些方法包装到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();
}

Java提供了两种类型的异常:选中和未选中

选中一次是编译器将提示您也要处理的异常(在try-catch块中),而对于未选中的异常,编译器不会要求您处理它们

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


基本上,RuntimeException是java认为在执行时发生的异常,而在执行时发生的任何事情(如NullPointerException)都无法处理,因此我们不能在编译时做太多工作。

您可以使它们
扩展RuntimeException
,因此可以在
抛出
块中忽略它们。看到更多我正在寻找的!干杯