无法通过抛出来理解外部代码

时间:2015-09-24 20:20:36

标签: java exception io throws

我正在尝试理解其他人编写的一些代码,并且不明白在那里如何使用'throws'。这是代码:

rBokeh

据我了解,带有抛出的代码应该以某种方式处理。但是,没有像try catch这样的处理机制。那么抛出的确切目的是什么?我测试了它,没有抛出它返回IOexception。

我的问题是:

  1. 是否正确写入部分?我假设应该有一些处理机制,但我不自信。
  2. 为什么代码现在正常工作,并且在这种状态下没有“抛出”?如果没有catch / try语句,它是否应该返回错误?没有捕获/尝试,我没有看到没有'投掷'和投掷之间的区别。

4 个答案:

答案 0 :(得分:1)

从main抛出的任何内容都会被写入stderr。如果你有一个小程序而你只想退出处理并在控制台上看到堆栈跟踪,如果出现错误,这是处理异常的最简单方法。

IOException是一个经过检查的异常,因此如果您想避免在该方法中捕获它,则必须抛出它。 IOException是Exception的子类,因此throws Exception包含IOException。

答案 1 :(得分:1)

正如您所说,“应该以某种方式处理带有抛出的代码”。但是,try-catch子句不是处理throws声明的唯一方法。另一种选择可能是决定您不处理该异常,只需在调用方法中添加throws子句即可。您可以继续添加这些throws声明,直到到达main,在这种情况下,您基本上声明您的程序不会处理错误,并且在发生此类错误时会毫不客气地崩溃。

它不优雅或“不合适”,但嘿,它有效。

答案 2 :(得分:1)

您提供的代码中的某些方法可能会抛出已检查的异常。这些已检查的异常必须由代码处理。为此你有两个选择:

  1. 使用try / catch块处理可能的异常
  2. 或者从方法签名
  3. 中提供 throws 关键字的方法中抛出异常

    正如您所看到的,代码的作者决定在不处理的情况下从方法中抛出异常。异常将进入主方法,在程序终止之前它将被打印到错误输出。

答案 3 :(得分:1)

如果你指的是main方法中的throws,那么它可以捕获任何可能的异常,而不必使用catch块。

基本上没有什么必须抓住它,因为java本身不会调用main,VM会这样做,如果VM捕获异常,它会将堆栈跟踪打印到stderr System.err.print (),然后退出。

这在测试时非常有用,因为您不必担心捕获等等,然后让VM自己完成所有操作。