如何编写抛出异常的方法头

时间:2015-03-06 13:06:47

标签: java exception methods filenotfoundexception fileinputstream

"鉴于FileInputStream的构造函数抛出FileNotFoundException,它是一个子类 例外,为带有String参数的名为process的公共方法编写标头 并且不返回任何内容,并且其实体实例化FileInputStream对象并且不包含 一个try-catch语句。"

我知道这是一个太简单的问题,但我想确保我不会以愚蠢的方式搞砸。此外,不确定是使用FileNotFoundException还是仅使用Exception或IO等

public process(String file) throws FileNotFoundException {

    FileInputStream file = new FileInputStream("stuff.txt");
}

5 个答案:

答案 0 :(得分:3)

你对throws条款的要求是好的。抛出IOException并不会很糟糕,但最好具体一点。调用代码仍然可以将其视为IOException。

通常你不应该抛出异常,除了特殊情况(Junit方法和抛出的所有内容都会被异常处理程序捕获的类似情况),因为它会强制调用它的所有内容处理异常处理的位置(它可能在哪里)不适合这样做的地方,最好让大多数异常冒泡到一个可以统一处理的地方)或抛出异常,然后将其他调用方法放在同一个位置。

您的方法声明无效,因为没有返回类型。声明返回类型为void的方法不返回任何内容。

对于方法参数使用与本地变量相同的名称将不起作用,您应该使它们不同。构造函数调用应该将method参数作为参数(而不是对字符串文字进行硬编码)。 (+1到geceo's answer指出那个,我错过了那个。)

作为建议,如果使用反映变量内容的名称,则代码会更清晰。调用FileInputStream file并不清楚,最好将其称为inputStream。调用字符串file并不清楚,最好将其称为filename

答案 1 :(得分:1)

你有什么不错(除了你错过void返回类型)。

始终抛出(并捕获)Exception最窄的规范(在这种情况下为FileNotFoundException)。

答案 2 :(得分:1)

正如Nathan所发现的那样,您忘记声明process没有返回任何内容,也就是说,您忘记了void关键字。

您的参数String file(“重复的本地变量文件”)存在另一个问题。您应该将其重命名为String filename并将其传递给FileInputStream的构造函数:

public void process(String filename) throws FileNotFoundException {
    FileInputStream file = new FileInputStream(filename);
}

关于一般主题,当您调用抛出异常的方法时,您总是必须做出选择:

  • 您可以使用try / catch块并处理调用方法中的错误(例如,记录它们);

  • 您可以使用方法声明中的throws关键字传播异常。

所以你在这里做的是第二种可能性。

答案 3 :(得分:0)

还添加void作为返回类型。 休息很好。

public void process(String file) throws FileNotFoundException {

    FileInputStream file = new FileInputStream("stuff.txt");
}

答案 4 :(得分:0)

通过购买意外滥用保险,您可以做一些事情来改善您的方法:

public void process(final String file) throws FileNotFoundException {

    final FileInputStream inputStream = new FileInputStream("stuff.txt");
    //invoke operations on inputStream object
    //After 100 lines of code
    inputStream = new FileInputStream("foo.txt"); // compile error
}

观察传递给method和FileInputStream对象引用的参数旁边的final关键字。