我看了一段解释投掷的视频,如下:
抛出-用于将异常委托/传递给调用方方法。
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'不存在,并且未在child方法中使用try catch处理异常,则child方法会将异常传递给main方法。
由于main方法无法使用try catch处理异常,因此它还会将异常抛出或传递给其调用方方法JVM。
对吗?
抛出-JVM仅理解拾取预定义异常的逻辑。因此,应使用new Exception
手动创建所有用户定义的异常,然后使用throw
关键字将其传递给JVM。
也正确吗?
答案 0 :(得分:0)
throws
来告诉所有人:“是的,此方法抛出X类型的Exception
,请警惕”,而throw
用于实际启动此操作Exception
并中止该函数的执行。
是的,取决于异常,是否捕获到异常,可能会一直冒泡到JVM。但是,某些Exceptions
不会不会导致执行中止。这些被称为RuntimeException
。程序员可以使用try / catch块来决定是否处理它们。 RuntimeException
不需要在函数签名中声明。
答案 1 :(得分:0)
解释有缺陷。首先,按照书面形式编写的child()不会扔东西。到目前为止,未找到文件并不是一个例外,除非您尝试打开该文件进行输入,否则不会例外。
不过,从您的代码中,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!
}
}