Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.nio.Path方法的工作原理_Java_Oracle_Java 8 - Fatal编程技术网

java.nio.Path方法的工作原理

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接口的方法的实现 我知道在一份声明中问两个不同的问题是很麻烦的,但我不知道这两个问题是如何分开的 编辑:这个问

我从年开始研究Java8中的
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
或使用普通Java
UnixPath
的执行方式可能与
WindowsPath
不同,即使它们的执行方式相同,
ZipFileSystem
提供的
ZipPath
也可能会有不同的执行方式。如果你愿意,你可以自己实现路径。但是如果我调用一个方法,你可以说