对java跨平台的疑惑!使用了JNI,或native的方法,就不能跨平台吗?

使用了JNI,或native的方法,就不能跨平台吗?可是,java中所有对象都源于Object对象,而Object对象又有一个native的clone()方法,那Java还怎么跨平台???不解,求指教!

JNI是使用了dll 即c的东西, c不能跨平台(windows下编译的东西和linux下编译的东西不同)
java当然是跨平台的, java面对的是jvm, 而jvm面对的是操作系统, 只要你系统中成功安装的了jvm, 那么就是一次编译处处运行
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-24
JNI 本身的名字就知道,是平台依赖的。JNI 是JAVA的扩展。

JNI 也可以做到跨平台,就是写JNI时考虑不同平台的差别。

当然,和JAVA本身一样,不同平台,还是需要重新编译的。追问

一般是编译一次就能在任何平台上运行,这是跨平台的意思。因为编译出来的是字节码文件,即.class文件,而到具体平台由具体的JVM运行,进行翻译成本地代码。但是不明白Object使用了native的方法,还说是跨平台。。。为啥呢?

追答

JNI 是JAVA和系统的接口。一般的JAVA应用,还是可以真正跨平台的。如一般的WEB应用、Application应用等

第2个回答  2013-04-25
跨平台的含义不是这样理解的 跨平台的意思是,只要写一次代码就能在多个平台上运行,比如Linux平台,Windows平台,UNIX平台等等配置了JAVA运行环境的平台
第3个回答  2019-05-23
六年了,我想你应该早就明白了这个原理,只是希望后面如果还有疑惑的人能够明白。
正式回答:
native是告诉操作系统这个方法由你来实现,而我JDK是什么也不会做的。JDK只负责通知,接收方是Windows那就用你Windows的办法给我实现好这个方法,接收方是Linux那你Linux就给我把这个方法实现好。所以不管什么操作系统JDK做的事情都是一样的。

jni是什么
1. 实现跨平台交互:JNI允许Java应用程序与本地代码进行交互,这意味着Java应用程序可以利用本地代码实现跨平台的功能。例如,某些特定的功能或操作可能只能在特定的操作系统上实现,通过JNI,Java应用程序可以调用这些本地代码来实现跨平台的交互和操作。2. 提高性能:对于一些需要高效运行的任务,JNI允许Jav...

Native 关键字详解
答案在于JNI(Java Native Interface)。JNI允许Java代码和其他语言编写的代码进行交互,满足以下需求:当Java类库不支持所需平台功能、已用其他语言编写类库需要调用、某些方法使用性能敏感语言(如汇编)实现时。从Java 1.1开始,JNI就作为Java平台的一部分,为解决上述需求提供了支持。通过JNI,Java程序可以...

JSP可以调用class里的native方法吗?如何调用?
我用java实现了JNI的调用,现在需要整合到tomcat发布的jsp页面中,所以在jsp里导入了这个class,然后生成对象,用obj.method()的方法调用class的方法,可是报错了,是native方法导致的... 我用java实现了JNI的调用,现在需要整合到tomcat发布的jsp页面中,所以在jsp里导入了这个class,然后生成对象,用obj.method()的方法调用c...

如何从使用 JNI Java 调用本机 代码
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用ja...

什么是跨平台
例如,Java可以跨平台使用,正是由於Swing库在许多平台下的实现。类似的,能进行跨平台的文件存取,是因为有各自平台下文件存取的库。以此类推,各种跨平台问题,都需要各自的本地库来解决。wxWidgets框架就是这样的一个跨平台库,根据不同的跨平台问题,提供了许多不同的解决方案;类似的库有许多,可以根据不同语言的跨...

JNI到底是啥
在日常的Java开发中,我们常常提到Java的跨平台和可移植性,但有时候平台特有的功能在Java中实现起来就显得不够便利。此时,JNI就显得尤为重要。它允许开发者在Java中调用本地代码,以实现对特定平台特有功能的访问。JNI中的“native”修饰的方法,实际上就是我们经常在Java源码中遇到的“native”方法。这...

java是如何调用native方法?hotspot源码分析必会技能
JDK、JRE和JVM的关系是这样的:JDK包含JRE,其中的JVM负责执行Java代码并进行操作系统间的转换。在OpenJDK源码中,特别是hotspot实现的JVM中,能找到native方法的具体实现。JNI(Java Native Interface)技术用于模拟Java调用C或C++编写的native方法,确保跨平台的兼容性。让我们通过实践来理解这个过程。首先,...

如何在Windows和Linux上进行跨平台P\/Invoke
之所以做跨平台的P\/Invoke,是因为考虑到有些客户在Win32\/WinCE等系统中开发的.NET程序,需要换到Linux平台运行。嵌入式开发中,经常需要操作IO,.NET程序就通过P\/Invoke来调用一些用比如c\/c++一类语言开发的native代码完成IO操作。这时候针对windows编写的native代码,就不能不加修改的移植到Linux上,要...

java中的native方法是用c语言实现的吗?
是的,native方法是JNI的Java部分,具体的实现使用的是C语言.先写一个JAVA空壳,然后用javah生成C语言接口,再写C语言程序 特别的,你可以使用汇编或者Fortran等

什么样的技术能让java调用c语言的代码
java是通过虚拟机实现跨平台技术的,因此要调用本地操作系统相关的代码,就必须采用JNI技术。而这就导致了JAVA与操作系统的一种应用绑定,失去了跨平台的特色。当然我们在应用中可能需要使用本地代码技术更加容易实现某个方法,采用这种方式有时也是必须的。其实不管你是用C还是其他语言编译的代码,只要符合...

相似回答