Java 抛出自定义错误
Java Throwing Custom Errors
所以我使用 Java 已经有一段时间了。从技术上讲,我对这门语言还是陌生的。
我为我正在处理的个人项目创建了几个自定义错误,我想知道是否可以使用抛出这些错误的方法而不用 try-catch
块包围它?
抛出这些错误的方法得到了很好的使用,不必尝试每个单独的语句。
这也是一个新手 Java and/or 不看文档的人不会知道的问题。
有什么方法可以 运行 这些方法而不必 try
每个方法,记录这些错误的正确方法是什么?
使您的自定义异常扩展 RuntimeException
class。根据定义,这些不需要声明为从方法中抛出,也不需要被调用该方法的任何人捕获..
查看 Javadocs RuntimeException。
你可以捕获 Exception 或 Throwable
基本上你只需要捕获抛出的异常类型的超类,因为大多数异常都是 Exception 的子类,而 Throwable 几乎可以捕获所有的东西。
此外,RuntimeException不需要在编译时处理。我相信您知道的一个是 NullPointerExceptions,它们是 RuntimeExceptions。将它们包含在您的代码中不是一个好习惯,但如果必须的话。
最好的方法是只在代码中处理异常。
编辑:你真的只需要一个 try 和 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();
}
}
您也可以转嫁责任 "up the chain" 并让任何调用您的代码的人处理 try/catch:
public void myMethod() throws CustomExceptionOne, CustomExceptionTwo{
badMethodOne();
badMethodTwo();
}
Java 提供 2 种类型的异常:已检查和未检查。
检查一次是编译器会提示您处理的异常(在 try-catch 块中),而对于未经检查的异常,编译器不会要求您处理它们。
RuntimeException class 是未检查异常的顶级 class,因此如果您的自定义异常 classes 扩展了 RuntimeException class 那么编译器将不会自动提示您在 try-catch 块中明确处理它们。
基本上 RuntimeExceptions 是那些 java 认为在执行时发生的异常,并且无法处理在执行时发生的任何事情,例如 NullPointerException,因此我们在编译时不能做太多事情。
所以我使用 Java 已经有一段时间了。从技术上讲,我对这门语言还是陌生的。
我为我正在处理的个人项目创建了几个自定义错误,我想知道是否可以使用抛出这些错误的方法而不用 try-catch
块包围它?
抛出这些错误的方法得到了很好的使用,不必尝试每个单独的语句。
这也是一个新手 Java and/or 不看文档的人不会知道的问题。
有什么方法可以 运行 这些方法而不必 try
每个方法,记录这些错误的正确方法是什么?
使您的自定义异常扩展 RuntimeException
class。根据定义,这些不需要声明为从方法中抛出,也不需要被调用该方法的任何人捕获..
查看 Javadocs RuntimeException。
你可以捕获 Exception 或 Throwable
基本上你只需要捕获抛出的异常类型的超类,因为大多数异常都是 Exception 的子类,而 Throwable 几乎可以捕获所有的东西。
此外,RuntimeException不需要在编译时处理。我相信您知道的一个是 NullPointerExceptions,它们是 RuntimeExceptions。将它们包含在您的代码中不是一个好习惯,但如果必须的话。
最好的方法是只在代码中处理异常。
编辑:你真的只需要一个 try 和 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();
}
}
您也可以转嫁责任 "up the chain" 并让任何调用您的代码的人处理 try/catch:
public void myMethod() throws CustomExceptionOne, CustomExceptionTwo{
badMethodOne();
badMethodTwo();
}
Java 提供 2 种类型的异常:已检查和未检查。
检查一次是编译器会提示您处理的异常(在 try-catch 块中),而对于未经检查的异常,编译器不会要求您处理它们。
RuntimeException class 是未检查异常的顶级 class,因此如果您的自定义异常 classes 扩展了 RuntimeException class 那么编译器将不会自动提示您在 try-catch 块中明确处理它们。
基本上 RuntimeExceptions 是那些 java 认为在执行时发生的异常,并且无法处理在执行时发生的任何事情,例如 NullPointerException,因此我们在编译时不能做太多事情。