Java 本机方法如何在源代码中工作而不在类中加载本机库?
我正在浏览FileInputStream的源代码,我看到了许多本机方法签名,但在源代码中的任何地方都找不到“System.Load”。所以我的问题是,在不加载本机库的情况下,这些本机方法是如何工作的?我尽了最大努力,但根据兼容虚拟机必须具备的条件,找不到正确的答案 为Java SE平台类库的实现提供足够的支持 编辑: 在规范中,没有任何规定必须在单独的库中实现。允许JVM不将本机实现放在单独的库中,而是将它们作为JVM代码本身的一部分。在这种情况下,代码应该加载哪个库 我认为这里的假设是JVM负责在方法执行之前正确加载它,库可以调用它,而不必关心加载库等等Java 本机方法如何在源代码中工作而不在类中加载本机库?,java,Java,我正在浏览FileInputStream的源代码,我看到了许多本机方法签名,但在源代码中的任何地方都找不到“System.Load”。所以我的问题是,在不加载本机库的情况下,这些本机方法是如何工作的?我尽了最大努力,但根据兼容虚拟机必须具备的条件,找不到正确的答案 为Java SE平台类库的实现提供足够的支持 编辑: 在规范中,没有任何规定必须在单独的库中实现。允许JVM不将本机实现放在单独的库中,而是将它们作为JVM代码本身的一部分。在这种情况下,代码应该加载哪个库 我认为这里的假设是JVM负
相反,自定义方法的本机实现由开发人员负责,因此他/她必须在调用该方法之前加载本机库。好的,JVM本身是一个本机应用程序,因此可以假设基本本机代码已经存在。您需要加载任何额外的本机lib,但不需要加载JVM的标准部分。您能用确切的实例详细说明您的答案吗?或任何文件?或者任何文档化的规范?我不知道有任何这样的文档或规范(bracco23已经发布的除外),但这并不意味着没有。另一方面,这也可能取决于JVM实现。您是否有任何特定的原因想/需要知道本机lib的加载位置?从您的参考资料中可以清楚地看到,JVM必须提供这些支持库,但不应该让FileInputStream加载这些库?加载是隐式的吗?这是在哪里指定的?@Rafa为什么要
FileInputStream
加载库?为什么库应该特定于该类?本机代码的确切布局可能取决于所使用的确切JVM版本。@thomos“为什么要加载库?”我们可以这样使用该类的本机方法,不是吗?本机方法支持文件应该在类本身加载时加载到静态块中。在实现我们自己的本机方法时,我们总是使用System.Load来实现这一点。