java.nio.Path方法的工作原理
我从年开始研究Java8中的java.nio.Path方法的工作原理,java,oracle,java-8,Java,Oracle,Java 8,我从年开始研究Java8中的nio.2。当我研究java.nio.file.Path时,java文档的第一行是 Path类,在JavaSE7版本中引入 这意味着Path是一个类,但当我查看时,我发现Path是一个接口 那为什么说这是一门课呢 我的另一个疑问是,如果Path是一个接口,那么Path方法(比如getRoot()isAbsolute()和所有其他)是如何工作的,因为没有Path接口的方法的实现 我知道在一份声明中问两个不同的问题是很麻烦的,但我不知道这两个问题是如何分开的 编辑:这个问
nio.2
。当我研究java.nio.file.Path
时,java文档的第一行是
Path类,在JavaSE7版本中引入
这意味着Path
是一个类,但当我查看时,我发现Path
是一个接口
那为什么说这是一门课呢
我的另一个疑问是,如果Path
是一个接口
,那么Path
方法(比如getRoot()
isAbsolute()
和所有其他)是如何工作的,因为没有Path
接口的方法的实现
我知道在一份声明中问两个不同的问题是很麻烦的,但我不知道这两个问题是如何分开的
编辑:这个问题不能重复,因为在这个问题上,提问者要求实现路径
接口,但这里我要问这个接口的方法是如何工作的,我的意思是,它是由JVM内部执行的,还是使用任何其他机制来执行它们。路径是一个接口,因为具体的实现取决于底层的文件系统。这些方法位于实现接口的类中,这些类依赖于平台
请注意,您从不使用new
构造路径对象,而是使用类似Paths.get
的方法,该方法返回相应类的实例
例如,在Oracle的实现中,windows中的路径由sun.nio.fs.WindowsPath
()实现,因为具体实现取决于底层文件系统。这些方法位于实现接口的类中,这些类依赖于平台
请注意,您从不使用new
构造路径对象,而是使用类似Paths.get
的方法,该方法返回相应类的实例
例如,在Oracle的实现中,windows中的路径由sun.nio.fs.WindowsPath
()路径
是一个普通的接口
,它与任何其他接口一样,由一个具体的类
实现,该类声明实现它,并为接口
的抽象
方法提供具体方法。因此,Path
的方法没有什么特别之处。正如所解释的,这个接口有一些普通的实现
您不应该感到困惑,因为在文档中它被称为“类”。虽然狭义上的class
是一种不同于interface
或enum
s的类型,但这些类型都是术语最广义的类。这反映在一个事实上,它们都存储在类文件中,并通过类加载器上的操作名loadClass
加载。在这些地方,接口和类之间没有区别。从这个角度来看,接口和枚举只是具有特殊属性的类(类似地,注释是具有特殊属性的接口)
在文档中,当您使用术语“类”的方式没有差异时,在广义上使用术语“类”是有意义的,即您在路径
实例上调用方法,而不必关心路径
类型是否为接口
。只有当读者是必须实现它的人时,才需要强调差异。路径
是一个普通的接口
,它与任何其他接口一样,由一个具体的类
实现,该类声明要实现它,并为接口
。因此,Path
的方法没有什么特别之处。正如所解释的,这个接口有一些普通的实现
您不应该感到困惑,因为在文档中它被称为“类”。虽然狭义上的class
是一种不同于interface
或enum
s的类型,但这些类型都是术语最广义的类。这反映在一个事实上,它们都存储在类文件中,并通过类加载器上的操作名loadClass
加载。在这些地方,接口和类之间没有区别。从这个角度来看,接口和枚举只是具有特殊属性的类(类似地,注释是具有特殊属性的接口)
在文档中,当您使用术语“类”的方式没有差异时,在广义上使用术语“类”是有意义的,即您在路径
实例上调用方法,而不必关心路径
类型是否为接口
。只有当读者是必须实现它的人时,才需要强调差异。@chrylis您可以看到,这个问题与您提到的问题不同question@chrylis您可以看到,这个问题与您引用的问题不同,但是如果我调用一个方法,比如path对象上的getRoot(),那么现在这个方法将如何执行,谁执行它(即JVM或OS)。这是一个奇怪的问题。CPU将执行代码。如果您想知道该方法是使用本机代码还是Java代码实现的;未指定,因为路径
是一个接口
。每个具体的实现都可以根据自己的喜好实现每个方法,native
或使用普通JavaUnixPath
的执行方式可能与WindowsPath
不同,即使它们的执行方式相同,ZipFileSystem
提供的ZipPath
也可能会有不同的执行方式。如果你愿意,你可以自己实现路径。但是如果我调用一个方法,你可以说