我看到了一段视频,它解释了投掷和投掷,如下所示:
抛出-用于将异常委托/传递给调用方方法。
class test{
void child() throws filenotfoundException{
//////## this method passes the exception to its caller which is main method
File f = new File("abc")
}
public static void main(String[] args) throws filenotfoundException{
//////##this main method passes the exception to its caller which is JVM
}
}因此,在上面的示例中,如果文件'abc‘不存在,并且在子方法中没有使用try catch处理异常,那么子方法将把异常传递给main方法。
由于主方法不使用try处理异常,它还抛出或将异常传递给其调用方方法(即JVM )。
是对的吗?
抛出- JVM只理解提取预定义异常的逻辑。因此,所有用户定义的异常都应该使用new Exception手动创建,然后使用throw关键字传递给JVM。
是对的吗?
发布于 2019-03-27 19:52:49
在方法签名中使用throws告诉每个人“是的,该方法抛出X类型的Exception,请小心”,而throw用于实际启动该Exception并中止函数的执行。
是的,取决于异常,如果您捕捉到了它,那么它可能一直泡到JVM。但是,一些Exceptions do 而非会导致执行中止。程序员可以使用try/catch块来决定是否处理它们。RuntimeException不需要在函数签名中声明。
发布于 2019-03-27 19:56:56
这个解释是有缺陷的。首先,写入的child()不会抛出任何东西。到目前为止,未找到的文件并不是一个例外,除非您试图打开该文件以供输入,否则不会例外。
但是,从您的代码中,子()可能会抛出异常,main()也可能会抛出异常。孩子没有,但它的定义是,它可能。
抛出是你实际上,嗯,抛出的异常。如下所示:
void child() throws FileNotFoundException {
File f("garbage");
if (!f.exists()) {
throw new FileNotFoundException("the world is clean as garbage does not exist");
}
}main()没有try/catch块,但它可以:
void main() {
try {
child();
}
catch (FileNotFoundException e) {
// Oh no!
}
}https://stackoverflow.com/questions/55385336
复制相似问题