关于java调用了windows的api函数的问题解答
2016-07-14 16:15
330 查看
java调用了windows的api函数还可以移植吗?当然不可以,windwos的API只能用于windwos,在linux或其它系统下,它是不能被运行的?
追问:不是说java是跨平台语言吗?这就不能移植了。
补充:你调用JAVA标准的函数,库等,它就是跨平台的。
你直接调用了与系统有关的API,SDK当然不可以的。
追问:偶,谢谢你,我也是这么认为的,虽然我没有学习java,我就一直纠结这个问题,java跨平台调用系统函数还能跨平台,疑问于是就问了,如果不调用系统函数,c和c++程序也可以跨平台了。
补充:C/C++是源码跨平台的,因为它的目标文件是基于系统的目标文件。
而JAVA的目标文件是class,它与目标系统无关,因为它是运行在目标系统的JAVA虚拟机上的。
JAVA的跨平台可以做到一次编译,到处运行,这个是C/C++无法做到的。
其于开源的QT,C++也可以很方便的做跨平台的应用。
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:那也不对啊,c和c++有虚拟机也能跨平台,比如exe文件在安卓运行有能打开exe的apk格式的模拟器不是也是一样用吗?反之过来akp格式的文件在电脑上有相应的虚拟机模拟出来也能运行apk文件,和java是一个道理,java没有虚拟机就运行不了,只要有相应的虚拟机所有语言都可以跨平台。
补充:JAVA虚拟机目前支持几乎所有操作系统及平台,且它对外设也有自己的接口,而C/C++所有的虚拟机都没有一个统一标准的,且就说你的exe,早期的DOS和现在windows下就不兼容。
追问:偶,好吧,还有一个问题就是安装包是不是属于软件的加壳?包括哪些镜像都是文件的壳?
补充:安装包不能说是加壳,加壳一般指对exe文件进行加密以防止调试或破解,而安装程序只是将一个或多个文件进行压缩,并对要安装进行配制。
镜像更不是文件的壳,它一般是将光盘做成一个文件(格式一般也是压缩的)。
追问:不是说java是跨平台语言吗?这就不能移植了。
补充:你调用JAVA标准的函数,库等,它就是跨平台的。
你直接调用了与系统有关的API,SDK当然不可以的。
追问:偶,谢谢你,我也是这么认为的,虽然我没有学习java,我就一直纠结这个问题,java跨平台调用系统函数还能跨平台,疑问于是就问了,如果不调用系统函数,c和c++程序也可以跨平台了。
补充:C/C++是源码跨平台的,因为它的目标文件是基于系统的目标文件。
而JAVA的目标文件是class,它与目标系统无关,因为它是运行在目标系统的JAVA虚拟机上的。
JAVA的跨平台可以做到一次编译,到处运行,这个是C/C++无法做到的。
其于开源的QT,C++也可以很方便的做跨平台的应用。
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:我明白了,意思就是c++和c的源代码程序本身跨平台,编译成二进制不能使用,因为编码格式不同,而java首先编译成目标代码class文件,这个格式是通用的,所以在哪个平台都可以使用,最后同个个平台不同的java虚拟机解释class文件成可执行文件,最后执行,之所以java夸请他1是因为目标class相同,对吗?
追问:那也不对啊,c和c++有虚拟机也能跨平台,比如exe文件在安卓运行有能打开exe的apk格式的模拟器不是也是一样用吗?反之过来akp格式的文件在电脑上有相应的虚拟机模拟出来也能运行apk文件,和java是一个道理,java没有虚拟机就运行不了,只要有相应的虚拟机所有语言都可以跨平台。
补充:JAVA虚拟机目前支持几乎所有操作系统及平台,且它对外设也有自己的接口,而C/C++所有的虚拟机都没有一个统一标准的,且就说你的exe,早期的DOS和现在windows下就不兼容。
追问:偶,好吧,还有一个问题就是安装包是不是属于软件的加壳?包括哪些镜像都是文件的壳?
补充:安装包不能说是加壳,加壳一般指对exe文件进行加密以防止调试或破解,而安装程序只是将一个或多个文件进行压缩,并对要安装进行配制。
镜像更不是文件的壳,它一般是将光盘做成一个文件(格式一般也是压缩的)。
相关文章推荐
- Eclipse下svn的创建分支/合并/切换使用
- java.util.concurrent源码学习三
- Java Socket通信 客户端与服务器端的连接 和信息传输
- JAVA类属性和对象属性的初始化顺序
- MyEclipse使用心得:SVN插件安装方法
- 利用spring线程池ThreadPoolTaskExecutor发送手机短信
- Java Thread Stop方法以及替换实现
- Activiti基础教程--05流程实例、任务的执行
- mybatis_XML映射配置文件
- java gof 设计模式 目录贴
- 一个可供参考的Java高并发异步应用案例
- spring 自带的定时器task
- java 如何使的float保留2位或者多位小数
- 11.Java 基础 - 泛型
- spring+mvc+mybatis+maven(上传+拦截+json出现下载问题)
- java web 代码
- Java 8指南
- Struts2.0多文件上传下载
- 如何在netbeans下指定jdk
- java源码分析(15)-HashMap