[英]Need a better explanation for try/catch/throw/throws exception handing in Java
我有点不确定 Java 中的 try/catch、throw 和 throws 之间的区别,每个网站似乎都有一种非人道的解释方式,我尝试过 Oracle 网站,但我无法理解他们的解释,这是正确的?
试着抓
使用 try catch,我想尝试一段代码,如果出现问题,请执行此操作。
扔
使用throw,我抛出一个错误是因为我想要? 所以如果我想验证一个用户的年龄,比如说所有 20 岁以上的人并且用户不符合要求,我会抛出错误吗?
投掷
使用 Throws 我抛出一个错误但其他东西处理异常? 这是另一种方法/类吗?
试着抓
try
{
// try to do some actions
}
catch(SomeExceptionType exception)
{
// if the above actions throw a SomeExceptionType, do these actions
}
扔
正确的。 我们明确地抛出异常。 例如,如果某个方法的调用者违反了您的方法契约,您就可以这样做。 也许一个论点不能是否定的。
在这种情况下,最好的处理方法是抛出一个异常,停止我们正在做的事情,并允许调用者进一步处理这个问题:
/** Do a thing. myInt must be positive */
void someMethod(Integer myInt)
{
if (myInt < 0)
{
throw new IllegalArgumentException("Can't be negative");
}
// do something
}
void myCaller()
{
someMethod( 1); // won't throw
someMethod(-1); // will throw
}
投掷
throws
在处理检查异常时用作关键字。 这是一种让调用者知道他们可能需要处理哪些已检查异常的方法。
这些方法可以决定处理问题(即 try-catch),也可以自己声明要抛出的相同异常类型以将异常传播给调用者(等等)
您忘记了一个重点:在 Java 中,编译器不会以相同的方式处理所有异常。
编译器确保只处理已检查的异常。
这些异常不是从RuntimeException
继承的,而是从Exception
(直接或间接)继承的。
因此,无论您在代码中抛出什么或第三个类的方法声明抛出已检查异常,您都必须显式处理它。
你有两种方法:
捕获异常
让异常传播给调用者
try/catch
解决第一种方法,而在方法声明中指定throws
修饰符解决第二种方法。
对于没有RunTimeException
s,您没有此约束,因为编译器不会强制您处理它。 如果你愿意,你可以处理它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.