所以我现在已经使用Java了一段时间。从技术上讲,我对这门语言还是新手。
我为我正在处理的个人项目创建了一些自定义错误,我想知道是否还有使用抛出这些错误的方法而不包围try-catch
块?
抛出这些错误的方法得到了很好的使用,并且不应该尝试每个单独的语句。
任何刚接触过Java的人和/或没有阅读过文档的人都不会知道这个问题。
有没有办法运行这些方法而不必每个try
,以及记录这些错误的正确方法是什么?
答案 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块