Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 本机方法如何在源代码中工作而不在类中加载本机库?_Java - Fatal编程技术网

Java 本机方法如何在源代码中工作而不在类中加载本机库?

Java 本机方法如何在源代码中工作而不在类中加载本机库?,java,Java,我正在浏览FileInputStream的源代码,我看到了许多本机方法签名,但在源代码中的任何地方都找不到“System.Load”。所以我的问题是,在不加载本机库的情况下,这些本机方法是如何工作的?我尽了最大努力,但根据兼容虚拟机必须具备的条件,找不到正确的答案 为Java SE平台类库的实现提供足够的支持 编辑: 在规范中,没有任何规定必须在单独的库中实现。允许JVM不将本机实现放在单独的库中,而是将它们作为JVM代码本身的一部分。在这种情况下,代码应该加载哪个库 我认为这里的假设是JVM负

我正在浏览FileInputStream的源代码,我看到了许多本机方法签名,但在源代码中的任何地方都找不到“System.Load”。所以我的问题是,在不加载本机库的情况下,这些本机方法是如何工作的?我尽了最大努力,但根据兼容虚拟机必须具备的条件,找不到正确的答案

为Java SE平台类库的实现提供足够的支持

编辑:

在规范中,没有任何规定必须在单独的库中实现。允许JVM不将本机实现放在单独的库中,而是将它们作为JVM代码本身的一部分。在这种情况下,代码应该加载哪个库

我认为这里的假设是JVM负责在方法执行之前正确加载它,库可以调用它,而不必关心加载库等等


相反,自定义方法的本机实现由开发人员负责,因此他/她必须在调用该方法之前加载本机库。

好的,JVM本身是一个本机应用程序,因此可以假设基本本机代码已经存在。您需要加载任何额外的本机lib,但不需要加载JVM的标准部分。您能用确切的实例详细说明您的答案吗?或任何文件?或者任何文档化的规范?我不知道有任何这样的文档或规范(bracco23已经发布的除外),但这并不意味着没有。另一方面,这也可能取决于JVM实现。您是否有任何特定的原因想/需要知道本机lib的加载位置?从您的参考资料中可以清楚地看到,JVM必须提供这些支持库,但不应该让FileInputStream加载这些库?加载是隐式的吗?这是在哪里指定的?@Rafa为什么要
FileInputStream
加载库?为什么库应该特定于该类?本机代码的确切布局可能取决于所使用的确切JVM版本。@thomos“为什么要加载库?”我们可以这样使用该类的本机方法,不是吗?本机方法支持文件应该在类本身加载时加载到静态块中。在实现我们自己的本机方法时,我们总是使用System.Load来实现这一点。