"鉴于FileInputStream的构造函数抛出FileNotFoundException,它是一个子类 例外,为带有String参数的名为process的公共方法编写标头 并且不返回任何内容,并且其实体实例化FileInputStream对象并且不包含 一个try-catch语句。"
我知道这是一个太简单的问题,但我想确保我不会以愚蠢的方式搞砸。此外,不确定是使用FileNotFoundException还是仅使用Exception或IO等
public process(String file) throws FileNotFoundException {
FileInputStream file = new FileInputStream("stuff.txt");
}
答案 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);
}
关于一般主题,当您调用抛出异常的方法时,您总是必须做出选择:
或
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关键字。