java为什么不能直接控制硬件?问题有点深,高手进。

有一个很普遍的认识:java不能直接控制硬件什么什么的.............这是真的吗,还是人云亦云。我们知道c是:源代码-->汇编-->硬件;java是:源代码--... 有一个很普遍的认识:java不能直接控制硬件什么什么的.............这是真的吗,还是人云亦云。
我们知道c是:源代码-->汇编-->硬件;java是:源代码-->字节码-->JVM-->硬件。
这不都一样,只是java多了一层而已,如果你说是因为JVM存在,使得java不能直接控制硬件的话,请详细解释,非常感谢!
解释一下我的问题:JVM和汇编,虽然很不相同(这点大家都知道,因为这明明就是两种东西,就像大象和苹果一样),从效果来看JVM和汇编都可以控制硬件(这里不深究),那么就说明JVM可以与硬件交互(实际JVM就是为了控制底层硬件而设计的,可以说java是跨平台的,但JVM绝不是跨平台的),那么因为java可以“控制”JVM,JVM可以与硬件交互,所以java可以与硬件交互,所以java可以开发类似“驱动”的,这种东西。
展开
 我来答
yyyrrrbbbok
推荐于2017-09-06 · TA获得超过121个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:197万
展开全部
java是:源代码-->字节码-->JVM-->操作系统->硬件(你少了一个)
java是不能直接控制硬件,java帮助开发者隐藏了硬件,软件的不同导致的兼容性问题,这也导致了开发者无法直接操作硬件。意思就是java寄生在操作系统上,做了一个虚拟机,所有装了java runtime的jvm都是一样的。这个jvm提供的API都是一样,硬件的不同不能在代码上产生改变,所以就是不能直接访问硬件咯。
追问
那用java可以调用,硬件的驱动吗?我想用java开启本子上的摄像头,应该怎么做呢?
还有一个问哈,在哪里能看到JDK 的源码呢?我想看一下它的socket是怎么实现的,非常感谢!
追答
可以的。摄像头怎么搞:http://blog.csdn.net/wmyasw/article/details/6655952
JDK源码sun的好像不开源.openjdk:http://openjdk.java.net/开源的。
梅森琦
2019-12-09 · 擅长 LaTeX 排版方面的问题。
梅森琦
采纳数:147 获赞数:643

向TA提问 私信TA
展开全部
JVM 运行在操作系统之上,操作系统有直接控制系统的原语,所以 JVM 可以通过系统调用来控制硬件。其他编译型语言直接编译为对应平台的机器码,所以可以说是“直接”控制硬件,但是 Java 没有这种“直接”的效果,不过作为一个图灵完备的语言,它理论上可以做任何事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LJD2499649768
2012-05-10
知道答主
回答量:2
采纳率:0%
帮助的人:3420
展开全部
JVM是Java虚拟机的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。

汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件

对比一下你应该能 知道了吧
追问
从你的答案来看,你还是不懂。JVM和汇编,虽然很不相同(这点大家都知道,因为这明明就是两种东西,就像大象和苹果一样),但你可能没看明白我的问题,实际这个问题很深:JVM和汇编都可以控制硬件(这里不深究,单从效果来看),那么就说明JVM可以与硬件交互(实际JVM就是为了控制底层硬件而设计的,可以说java是跨平台的,但JVM绝不是跨平台的),那么因为java可以“控制”JVM,JVM可以与硬件交互,所以java可以与硬件交互。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悉心且深远灬萨摩A
2012-05-10 · TA获得超过636个赞
知道小有建树答主
回答量:294
采纳率:0%
帮助的人:330万
展开全部

我是来回答源码的。如图所示,在你安装的java的路径下(jdk/下)有bin,有jre等目录,还有一个src.zip压缩文件,它就是java的源代码了。如果你英文不错,就会发现,API就是翻译的源代码中的注释!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Sallie
2018-05-28
知道答主
回答量:4
采纳率:0%
帮助的人:2.7万
展开全部
LJD2499649768回答的很好,你的追问台天真了。JVM是C写的,C是汇编写的。汇编可以使用硬件,c通过汇编间接的可以。同理JAVA 跑在JVM上,JVM是有能力控制和使用硬件的,那面理论上JAVA也是可以控制的硬件的。但是为什么不能呢?因为Java语言和JVM是人家开发的,人家没有给你实现控制硬件的功能!因为Java语言和JVM是人家开发的,人家没有给你实现控制硬件的功能!因为Java语言和JVM是人家开发的,人家没有给你实现控制硬件的功能!(我说了三遍) 你用Java是基于人家开发的东西来做东西,人家没给你这个功能,所以你再怎么折腾也不可能通过 JAVA-JVM-硬件这条线来控制硬件,这条路人家给你封死了! 可以通过Java 调用C 来间接的实现~
再多余说一点,为什么JAVA不给硬件权限? 因为JAVA是面对软件开发的语言,人家吧内存分配垃圾回收什么的统统给你写好了,这样让程序员只关注实现自己的业务需求就行,而不需再关注硬件方面的问题。突出了Java的优点:简便、兼容。 大大的简化了开发过程~ 这是Java的核心,人家没有必要开放硬件控制。。。
再补充一下,Java提供了JNI,可以去看一看,能在同一进程中调用其他语言(主要是C和C++),但是会失去一些Java的优点,如用来jni的程序不再通用,换平台后要重新编译。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式