我读过这个:我可以在构造函数中使用 throws 吗?- 这给了我正确的想法,并引导我得到一个答案,但不是很明确。我也阅读了其他几个,但找不到我的答案。回顾一下我从上下文中学到的东西,基本上,这不会编译......
public ExampleClass(String FileName)
{
this(new FileInputStream(FileName));
}
public ExampleClass(FileInputStream FileStream)
{
DoSomethingToSetupBasedUponFileStream(FileStream);
}
...因为FileInputStream
构造函数(从字符串构造函数调用)可能会抛出 FileNotFoundException。您仍然可以通过使其抛出相同的异常来创建构造函数,如下所示:
public ExampleClass(String FileName) throws FileNotFoundException
{
this(new FileInputStream(FileName));
}
我的问题与默认构造函数(无参数)有关,该构造函数仅使用默认文件名字符串常量:
public ExampleClass() throws FileNotFoundException
{
this(DEFAULT_FILE_NAME);
}
这会将构造函数链接为:
ExampleClass()
--> ExampleClass(<String>)
-->ExampleClass(<InputFileStream>)
在这种情况下,是否可以在默认构造函数中使用默认值(静态最终类成员)来实例化(进一步沿着链) FileInputStream,但不必使用throws FileNotFoundException
代码(这需要有人使用类重新抛出或处理异常?
如果我可以执行以下操作,我将自己处理异常:
public ExampleClass()
{
try
{
this(DEFAULT_FILE_NAME);
}
catch (Exception e)
{
DoSomethingToHandleException(e);
}
}
...但是,据我所知,这是不可能的,因为“构造函数调用必须是构造函数中的第一条语句”
在这一点上更习惯于.Net,如果我真的不想这样做,我从来没有被迫处理异常......:D