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

Java 一个FileOutputStream构造函数会调用另一个吗?,java,file,constructor,fileoutputstream,Java,File,Constructor,Fileoutputstream,我查看了FileOutputStream的java文档 看到一个构造函数只接受一个文件对象,另一个构造函数接受一个文件对象和一个布尔追加。第一个构造函数是否会调用第二个构造函数,并将false作为append传递?Java文档没有提到这一点是的,(Oracle JDK)FileOutputStream使用了构造函数链接。这只是一个实现细节,除非API规范(javadoc)中提到,否则不应该依赖它 如果使用不带布尔值的构造函数,则会发生以下情况 FileOutputStream(File file

我查看了FileOutputStream的java文档 看到一个构造函数只接受一个文件对象,另一个构造函数接受一个文件对象和一个布尔追加。第一个构造函数是否会调用第二个构造函数,并将false作为append传递?Java文档没有提到这一点

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


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

FileOutputStream(File file) throws FileNotFoundException {
 this(file, false);
}
通常在这类场景中,值true或false是根据最常用的操作确定的。因此,如果您在OutputStream上进行写入,那么大部分时间您将创建一个新文件,因此默认情况下它将传递
false

干杯

是的,没错。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说明。

这有关系吗?不管它是否调用其他构造函数,效果都是一样的。java源代码是可用的,人们可以随时查看以了解底层实现。您想要实现什么?好奇,我只是想看看构造函数是如何实现的,这里它调用了两个参数的构造函数,第二个值是
false
。谈论Oracle的JDK和OpenJDK的JDK是不正确的。它们由同一(Oracle)团队开发;看见“OpenJDK的JDK”的版权归Oracle所有。@StephenC当然,但即使属于同一个团队,它们不是两个不同的实现吗?我如何引用您得到的Java JDK?1)是和否。事实上,它们几乎完全相同。2) 我将它们称为“Oracle JDK”或“热点JDK”与“OpenJDK JDK”。(或者Hotspot和OpenJDK)注意-不要使用所有格。