java-Java使用的核心类库是JRE,C++没有类似自己的核心类库,这就是Java可移植性的原因么

问题描述

Java使用的核心类库是JRE,C++没有类似自己的核心类库,这就是Java可移植性的原因么

我只接触过java,而且只用过windows。一直都知道java与其他语言区别之一是可移植性,但具体是什么一直说不清楚。
目前在看swing和awt等关于图形的,有说awt是重量级的依赖于操作系统绘图,移植其他平台,画风大变,效果很差;swing是轻量的,不依赖。
是不是awt底层调用了操作系统已有类库,导致移植其他平台效果很差,而swing自己用底层语言一笔一划做出图形,不用操作系统原有库,所以移植效果好。
那么是不是C++没有自己的向swing,awt这样的核心类库,或者很少。大部分使用功能等同于JRE但是是由本操作系统提供的类库,而不同的操作系统提供的类JRE类库又不是太一样,导致不同操作系统调用这些核心类库的代码(基础程序)就要写的不同,就是不可移植性的特点了。
请问是不是这样的呢。
另外就是awt是重量级,swing是轻量级,为什么呢。swing我看了下,swing类基础是JComponent,这个类里的确有一些绘图的成员变量,比如一个ComponentUI接口,ComponentUI里面有预定义paint方法,我猜是编译器的api接口,实现后编译器会自己绘形状。而awt基础类是Component,里面有个peer接口,关于这个peer介绍是“The peer implements the component's behavior”,是不是这个peer存储的信息就是编译器调用操作系统的api接口。不知道以上猜测是否正确。

解决方案

各有各的好处。一个是调用操作系统控件层面的代码。比如告诉操作系统,这里放一个文本框,那里放一个按钮。一个是调用操作系统绘图层面的代码,比如这里画一个方框,那里填充白色。

前者可以保证程序在不同操作系统下拥有最自然的显示效果,后者保证了在不同操作系统下拥有一致的效果(但是那些awt的界面,总觉得怪怪的)。

可移植性分为几个层次,一个是源代码的可移植性。一个是二进制程序的可移植性。一个是操作系统和软件环境的可移植性。一个是性能的可移植性。Java的可移植性主要说的是二进制程序的可移植性,因为Java不产生特定机器代码,所以可以在不同平台运行。

但是C++完全可以做到源代码层面的可移植性。C++没有类似自己的核心类库这个观点也是不对的。实际上,QT这个库本身就是跨平台的,而且可以让你的C++代码移植到不同的操作系统。典型的,Eclipse就是一个C++写的程序(上层是Java),它为什么在Linux和Windows下有一样的界面,就是这个道理。

虽然Java在二进制代码层面有可移植性,但是这也不是万能的。比如说android的应用,严重依赖操作系统和软件环境,你能拿到windows下运行么?

解决方案二:

c++也有stl标准库。最主要还是当初java的类库更丰富,c++早期类库控制比较严格,很多都是自己做轮子,各个企业都有自己的一套。导致cpp发展缓慢。

解决方案三:

Java可移植性并不是因为核心库,关键谁的
在于编译后的文件,JAVA编译后是生成.class的字节码文件的,而java程序行动依托虚拟机,虚拟机再来加载字节码
所以只要将字节码文件拷贝到其实虚拟机就可以让程序运行了。这才是JAVA一次编程,到处运行的真实原因
C++而不是这样的,在windows,它编译后成生的是一此link文件.dll/lib文件,link文件再组装成exe文件 ,然后直接就可以运行了。而linux下C++又和window
不一样了,所以它们无法实现跨平台

解决方案四:

C++依赖操作系统,所以并不是所有系统都可以运行,而Java依赖虚拟机,所以能装上虚拟机的操作系统都可以运行java程序,当然实际中会有一些问题。理想的是Write One,Run Everywhere。而这样的理想靠的就是虚拟机

解决方案五:

Java核心类库之collections

解决方案六:

Java为什么吹他可移植呢??因为使用Java写的代码不是直接编译成机器码,,,而是编译为Java虚拟机能识别的字节码

你只要编译一次,,字节码都是相同的,,然后你要在不同的平台下运行,,只需提供不同平台的Java虚拟机即可,,

解决方案七:

您好,您写的太多,没能全能明白。我讲几点自己的个人认识,关于可移植性,跨平台。虽然和语言相关比如java,java可以跨平台并不在于语言本身,而在于提供的机制,JAVA虚拟机这个东西才是JAVA可以跨平台的关键。C#也是在UNIX-Like环境下跑的,就看你提供了什么平台。我一直觉得,语言本身的区别尽管有,但更多地在于你如何去运用。JAVA可以做的事情,C,C++,C#理论上都是可以去做的。关于类库,不管是JAVA还是C++都有大量丰富的类供使用,图形图像方面,C++有一定的优势,毕竟C++的年纪更大一些,JAVA的身上不可避免地有C++的影子。以上是我的个人观点,不对之处希望不要误导你,仅供参考

时间: 2024-11-01 09:14:54

java-Java使用的核心类库是JRE,C++没有类似自己的核心类库,这就是Java可移植性的原因么的相关文章

java.io中的默认路径是jre所在磁盘根目录么

问题描述 java.io中的默认路径是jre所在磁盘根目录么 如题,File对象中写入相对路径,再显示绝对路径,发现在D:,代码如下.我的jre,eclipse和程序文件夹都在D盘下,但都不在根目录,不知是否java.io中的默认路径都是所在磁盘的根目录. static void p(String s) { System.out.println(s); } public static void main(String[] args) { // TODO Auto-generated method

java的socket的client和server都用多线程,server和client都是java,怎么解决,急急!!

问题描述 java的socket的client和server都用多线程,server和client都是java,怎么解决,急急!! client请求server建立连接 线程1:保持连接,client随时接收server消息并向server返回消息 线程2:向server发请求并接收server返回的消息 解决方案 加我QQ1357197829发给你 解决方案二: Java网络编程之多线程Client-Serverjava 和 C++ Socket通信(java作为服务端server,C++作为

解决方案-如何进行Java的混淆与加密?Tomcat如何调用混淆和加密后的JAR和Java类文件?

问题描述 如何进行Java的混淆与加密?Tomcat如何调用混淆和加密后的JAR和Java类文件? 由于公司的Java商用程序需要部署在第三方平台,我们需要对Java商用程序进行混淆 和加密.混淆我们想采用ProGuard的解决方案对JAR和Java类文件进行混淆,加密我们 采用JCE加密方案. 我们的开发环境是: OS: Ubuntu Web APP: Apache Tomcat Java编译: Apache Maven 因我们之前没有做过这方面的研究,所以请教各位提供详细的实施和部署操作!

java频繁连接、调用oracle数据库的某存储过程,且存储过程返回游标在JAVA中遍历,使用什么连接,或什么方式效率比较好??

问题描述 java频繁连接.调用oracle数据库的某存储过程,且存储过程返回游标在JAVA中遍历,使用什么连接,或什么方式效率比较好??

类似EXCEL的报表类库(更新)

我在 VCKBASE <在线杂志>第二十四期中有一篇文章"类似EXCEL的报表类库".这篇文章中的例子程序已经有最新版了,界面截图和文档内容也已更新.最新程序请从本文上方的链接处下载. 20030907更新内容: 1)开始在程序里支持图表显示 2)修改了在打印部分的输出线条偶尔有重叠现象 3)支持了在单元格里面放入下拉式列表 20030807更新内容: 1)这一版解决了打印预览和合并单元格在分页打印时候的打印内容错误问题. 2)解决了在WIN9X环境下的网格线条显示和打印问

Java基础知识——SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系

  相信大多数java初学者被这些概念搞蒙过,它们之间到底有什么区别,又有什么联系呢?下面我将一一解开大家心中的谜团.首先给大家解释一下这些概念:   1 SDK(Software DevelopKit,软件开发工具包) 用于帮助开发人员的提高工作效率.各种不同类型的软件开发,都可以有自己的SDK.Windows有WindowsSDK,DirectX 有 DirectX 9SDK,.NET开发也有Microsoft.NET FrameworkSDK.JAVA开发也不含糊,也有自己的Java SD

搭建Java环境JDK,和运行环境JRE

1:想要学习Java第一步就是搭建Java环境,就是安装JDK,又因为JDK里面包含JRE,所以在安装JDK的过程中就安装了JRE,所以以下只是给出了JDK的安装包,自行下载安装即可 链接:http://pan.baidu.com/s/1hrREdUk 密码:r6v0(安装过程中比较简单,在此省过) 2:重点说一下环境变量配置 首先打开控制面板->系统安全->系统->高级系统设置 然后 点击环境变量 然后 点击环境之后如下图,你可以选择编辑或者新建(存在的就编辑,不存在就新建) 再然后

《Java和Android开发学习指南(第2版)》—— 1.2 第一个Java程序

1.2 第一个Java程序 本小节将强调Java开发中的步骤,即编写程序,将其编译为字节码以及运行字节码. 1.2.1 编写Java程序 可以使用任何文本编辑器来编写Java程序.打开一个文本编辑器,并且输入代码清单1.1中的代码.或者,如果你已经下载了本书配套的程序示例,只要将它复制到你的文本编辑器中就可以了. 如果你还没有下载代码,现在就可以从异步社区的Web站点下载示例.在前言的最后部分中,给出了下载地址.代码清单1.1 一个简单的Java程序 class MyFirstProgram {

VC实现类似EXCEL的报表类库

此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的.我的信箱:zzxiong@citiz.net 现在这个sample不是很完整,我也正在完善中,相应的函数接口到时我会整理成一个文档发布给大家. 声明: 对于此代码中可能引用了其他网站上的一些技术,如果侵犯了相关作者的权益请尽快联系我,我会删除其中不合适部分.也请下载此代码的人尊重代码的原作者的意愿.若下载者要使用此代码请自行征求原作者的意见. 1.12版本现支持单元格合并,文本对齐方式,字体,字体颜色