一个FileOutputStream构造函数会调用另一个吗?

时间:2014-07-25 04:42:30

标签: java file constructor fileoutputstream

我查看了FileOutputStream的java文档 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream(java.io.File) 并看到一个构造函数只接受了一个文件对象,另一个构造函数接受了一个文件对象和一个布尔附加。第一个构造函数是否会调用第二个构造函数,并将false传递为append? Java文档没有谈论这个

3 个答案:

答案 0 :(得分:0)

是的,(Oracle JDK)FileOutputStream使用构造函数链接。这只是一个实现细节,除非在API规范(javadoc)中引用,否则不应该依赖它。

Here's the OpenJDK JDK implementation which also chains constructor calls.

答案 1 :(得分:0)

如果使用不带布尔值的构造函数,则会发生以下情况。

FileOutputStream(File file) throws FileNotFoundException {
 this(file, false);
}

通常在这种情况下,根据最常用的操作确定值true或false。因此,如果您在OutputStream上编写,您将在大多数时间创建一个新文件,因此默认情况下会传递false

干杯!!

答案 2 :(得分:0)

是的,这是真的。 FileOutputStream(文件文件)调用 FileOutputStream(文件文件,布尔附加)设置append = false。供您参考,源代码类似于

public FileOutputStream(File file) throws FileNotFoundException {
    this(file, false);
}


    public FileOutputStream(File file, boolean append)
    throws FileNotFoundException
{
    String name = (file != null ? file.getPath() : null);
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
        security.checkWrite(name);
    }
    if (name == null) {
        throw new NullPointerException();
    }
    this.fd = new FileDescriptor();
    this.append = append;

    fd.incrementAndGetUseCount();
    open(name, append);
}

通常,JavaDoc不会说内部细节。它仅用于API描述。