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

有一个很普遍的认识:java不能直接控制硬件什么什么的.............这是真的吗,还是人云亦云。
我们知道c是:源代码-->汇编-->硬件;java是:源代码-->字节码-->JVM-->硬件。
这不都一样,只是java多了一层而已,如果你说是因为JVM存在,使得java不能直接控制硬件的话,请详细解释,非常感谢!
解释一下我的问题:JVM和汇编,虽然很不相同(这点大家都知道,因为这明明就是两种东西,就像大象和苹果一样),从效果来看JVM和汇编都可以控制硬件(这里不深究),那么就说明JVM可以与硬件交互(实际JVM就是为了控制底层硬件而设计的,可以说java是跨平台的,但JVM绝不是跨平台的),那么因为java可以“控制”JVM,JVM可以与硬件交互,所以java可以与硬件交互,所以java可以开发类似“驱动”的,这种东西。

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/开源的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-09
JVM 运行在操作系统之上,操作系统有直接控制系统的原语,所以 JVM 可以通过系统调用来控制硬件。其他编译型语言直接编译为对应平台的机器码,所以可以说是“直接”控制硬件,但是 Java 没有这种“直接”的效果,不过作为一个图灵完备的语言,它理论上可以做任何事。
第2个回答  2012-05-10
JVM是Java虚拟机的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。

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

对比一下你应该能 知道了吧追问

从你的答案来看,你还是不懂。JVM和汇编,虽然很不相同(这点大家都知道,因为这明明就是两种东西,就像大象和苹果一样),但你可能没看明白我的问题,实际这个问题很深:JVM和汇编都可以控制硬件(这里不深究,单从效果来看),那么就说明JVM可以与硬件交互(实际JVM就是为了控制底层硬件而设计的,可以说java是跨平台的,但JVM绝不是跨平台的),那么因为java可以“控制”JVM,JVM可以与硬件交互,所以java可以与硬件交互。

第3个回答  2012-05-10

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

第4个回答  2018-05-28
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的程序不再通用,换平台后要重新编译。

java为什么不能直接控制硬件?问题有点深,高手进。
java是不能直接控制硬件,java帮助开发者隐藏了硬件,软件的不同导致的兼容性问题,这也导致了开发者无法直接操作硬件。意思就是java寄生在操作系统上,做了一个虚拟机,所有装了java runtime的jvm都是一样的。这个jvm提供的API都是一样,硬件的不同不能在代码上产生改变,所以就是不能直接访问硬件咯。

请高人进.JAVA的问题
特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函...

JAVA高手请进!!真的要是高手,答好了继续给分
二、这个代码量很小(核心代码只有一个方法,那就是找找找),只是算法有点复杂,所以不会浪费你很多不必要的时间。(讨厌开发**管理系统的原因就是因为代码量大,且没啥技术含量)

java高手请进!
因为我们平时使用相对路径总是相对当前工作目录而言的,但有时需求并非如此。比如,要在一个开发包中使用相对路径,却不知道开发包被其他程序调用时的所在路径,而且特别是在web应用中,很难确定某个文件在整个应用中的相对路径。所以使用相对路径最好的办法就是让路径相对的参照物是我的开发包或我的应用...

JAVA工作问题!行家朋友回答下!
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦! 还有一个办法就是读开放源码的程序了。我们知道...

请java高手帮忙,解决一个难题呀?心急呀!
2.“语言及文字表达”,在你上面所提的问题中我无法清晰的看出你的问题是什么?在你的内容中首先你表达了求助的意思,然后应该是粘贴了一份其他其他来源的资料,在这两段之间最好有个过度性的转折,否则会感到很突兀。 最后的“几个需要注意的问题”最是奇怪,这是你提出的问题还是资料中别人提出的...

java一个小问题,高手请进!!!
不会呀,你说的010 020 什么的是存在list中的。e.getItem是返回你选中的是列表里的第几项。Item有索引的,你存的时候是有顺序的所以都对应好了,就是说item的索引和code索引还有name索引都是对应的相同的,所以可以在name中取出城市。

电脑问题,,高手请进...
有些人在网页制作中使用框架,但这对搜索引擎来说是一个严重的问题。即使搜索引擎找到你的内容页面,也可能错过其中关键性的导航栏目,从而不能进入搜索到其它页面。用Java和Flash做的导航按钮看起来是很漂亮美观,但搜索引擎找不到他们。补救的办法是在页面底部用常规HTML链接再做一个导航条,确保可以通过此导航条的链接...

硬件与软件的区别是什么?
二、软件产品质量的体现方式与硬件产品不同 质量体现方式不同表现在两个方面。硬件产品设计定型后可以批量生产,产品质量通过质量检测体系可以得到保障。但是生产、加工过程一旦失误。硬件产品可能就会因为质量问题而报废。而软件产品不能用传统意义上的制造进行生产,就目前软件开发技术而言,软件生产还是“定制...

关于java运行问题。如下请大家帮忙分析一下吧?
思考了一下,我觉得是因为java只有值传递没有引用传递造成的 num = num++;这道题我能不能看成这样 num = 0;temp = 0;num = temp ++;?根据java内存的分配情况来看,这个和num = num++是相等的。那么这个就可以看成 num = temp;temp = temp+1;因为java是值传递 所以temp的改变并不会最终...

相似回答