抛出-此解释正确吗?

时间:2019-03-27 19:45:15

标签: java

我看了一段解释投掷的视频,如下:

抛出-用于将异常委托/传递给调用方方法。

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。

也正确吗?

2 个答案:

答案 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!
   }
}