java与c、c++的区别:Java=“C++”-“复杂性和奇异性”+“安全性和可移植性”
1.全局变量
在java中不能在所有类之外定义全局变量,只能通过在一个类中定义公共、静态的变量来实现一个全局变量。
java对全局变量进行了更好的封装,而在c、c++中,依赖于不加封装的全局变量,常常造成系统的崩溃。
2.指针
c,c++中的指针最灵活,但也是最容易产生错误的数据类型,由指针所进行的内存地址操作常常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个c++中的私有成员,从而破坏了安全性,造成系统的崩溃。而java对指针进行了完全控制,java没有显式的指针类型,所有引用的对象(包括变量赋值、传递参数给方法以及数组元素)都是通过使用隐式引用,而不是通过指针来完成的。
在java中,引用还使用户容易创建诸如链接表之类的结构,而不需要显式指针,仅用指向下一个和前一个结点的变量创建一个链表结构,然后,在表中插入项目,把这些变量赋给其他结点对象。
3.数组
java中,数组是第一个特殊的类对象,而引用数组和它们的内容是通过显式引用而不是使用指针运算来完成的。数组的边界是要求严格检查的,一旦越界,将会产生编译或运行错误。如同其他对象一样,把数组传递给方法,就会传递原先的引用(地址)给该数组。因而,该数组引用的内容改变,更新原先数组对象。对象数组是引用数组,其初始化时并不包含实际的对象。
java并不像c、c++那样支持多维数组,在java中,用户可以创建包含其他数组的数组来支持多维数组。
4.字符串
在c、c++中,字符串是以一个空字符(\0)结尾的字符数组。为了操作和管理字符串,必须把它们当作其他数组来处理。
在java中,字符串是个封装的对象,而在字符串上操作的所有方法可把字符串作为一个完全的对象来处理。字符串即使可以用一个空字符结尾,也不能超越字符串终结的范围(如同数组的情况一样,字符串的边界检查是严格执行的)。
c和c++可以通过指针直接对字符串所在的内存地址进行操作,并不对越界情况进行检查,而java只能通过类String或StringBuffer所提供的接口对字符串进行操作,并且还要对越界情况进行检测并报告,大大增加了安全性。由于类String或StringBuffer的接口都经过明确说明,所以我们可以预知java中字符串处理的功能,而在c和c++中,只能通过库函数或者自定义函数才能对字符串进行处理。
5.内存管理
在c中,程序员是通过库函数malloc()和free()来分配和释放内存的。C++则是通过运算符new和delete来分配和释放内存的。如果再次释放已释放过的内存块或未被分配的内存块,会造成系统崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。
在java中,所有对象均通过运算符new为它们分配内存空间。通过new获得对象的处理权,而实际分配给对象的内存可能随程序运行而改变,java对此自动地进行管理,而当对象不再使用时,运行时间的垃圾收集器(Garbage Collector—GC)就释放该内存。为了“强迫”释放一个对象,移去该对象的所有引用(指定所有变量和数组元素,保持为空),下次java垃圾收集器运行时,回收该对象。如此,有效地防止由于程序员的误操作而导致的错误,并且更好地利用了系统资源。
6.数据类型
在c和c++中,对于不同的平台,编译器对基本的数据类型(char,int,float等)分配不同长度的字节数,如int在IBM PC中卫16位,在VAX-11中为32位,这导致了代码的不可移植性,而在java中所有的java的基本数据类型具有交叉平台和操作系统的一致长度和行为,总是分配固定长度的位数,如对int总是占32位,这就保证了java的平台无关性。Java没有C和C++那样无符号数据类型。布尔类型的值不是一个整数,是具有true和false两个值,虽然在java中可以强迫转换0和1到布尔类型,但是不能把它当作1来处理。
在java中,组合(或称引用)数据类型(类,接口和数组)仅通过使用类定义来完成,像C++中支持类的struct,union和typedef关键字均已去掉。
在java中,数据类型之间的强制类型转换有许多控制,只有在不丢失信息时,才发生自动的强制类型转换,所有其他的强制类型转换必须是显式的,基本数据类型(int,float,long,char,boolean等)不能强制转换到对象,反之亦然;方法特殊的“包装”类,可以在对象和基本类型之间转换值。
7.运算符
运算度优先级和结合率作用与C中一样,然而new关键字结合性比点符号(·)高,其表现与c++不同。
在java中没有C++中那样的重载运算符,此运算符以被删去,但可以使用“+”运算符来连接字符串。
8.控制流
在java中,虽然if,while,for和do在语法上和c、c++一样,差别在于,每个控制流结构的测试表达式,必须返回一个实际的布尔值(true或false),而在c和c++中表达式可以返回一个整数。
在java中,不支持C和C++中的goto语句,而是通过例外处理(exception handling)语句try catch和finaly等代替c和c++中用goto来处理遇到错误时跳转的情况,使程序更可读更结构化。
9.头文件
在c和c++中,用头文件来声明类的原型以及全局变量,库函数等。在大型系统中,维护这些头文件是很困难的。而java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员进行操作。同时java用import语句来与其他类进行通信,以便使用它们的方法。
10.参数
Java不像c和C++那样支持函数的变长参数表的机制,所有方法的定义必须具有特定的参数个数,此外,在空参数表中不能使用void。
在java中,命令行参数表现与在c和C++中不同。在c和c++中,参数的第一个元素(args[0])是程序的名字,在java中,args[0]对应c和c++中的args[1],它没有办法获得保存java程序名称。
11.其他差别
(1)java中没有预处理程序,不支持宏和#define,当说明类和实例变量时,通过final关键字来声明一个常量。在c和C++中用宏定义来实现的代码给程序的可读性带来了困难。
(2)java没有C++那样的模板类。
(3)java不包含c的const关键字,或者显式地按const引用传递的能力。
(4)java的所有函数必须是方法,而且必须依赖类。
(5)java通过接口(interface)提供单一与间接多重继承。
相关推荐
各种学习资料 Android Python Java Java web C语言 C++ 汇编 Android逆向 Arm开发 51单片机 Photoshop 会声会影 Windows Unity cocos2dx 教程 视频 各种学习资料 Android Python Java Java web C语言 C++ 汇编 ...
Java与C/C++的区别(转).
本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...
各种学习资料 Android Python Java Java web C语言 C++ 汇编 Android逆向 A
CPlus_to_Java_Converter(C++转java);C++转java软件
Java转C++代码工具 J2C
java调用c c++程序实例,java用eclipse编译,c/c++用visual studio2008编译。
压缩包里有两个工程,一个vc6.0一个myeclipse,本帖是修复贴,原帖地址c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING http://download.csdn.net/download/wangsonghiweed/4328267 -来自CSDN,有童鞋反映有...
Java与C_C++异同,下载大神的,分享给你们
java与C++的相互调用,使用JNI进行Java与C/C++语言混合编程。
Although it is based on C++, Java is more of a “pure” object-oriented language. Both C++ and Java are hybrid languages, but in Java the designers felt that the hybridization was not as important as ...
Java语言与C++语言的对比分析.pdf
Thinking in C: Foundations for Java & C++ by Chuck Allison produced by Bruce Eckel Chapter 1: Introduction and Getting Started40 MinutesStart Lecture Chapter 2: Fundamental Data Types41 ...
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。...详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
模拟实现android的binder机制在java层、c++层的模型最小例子。实现在不同进程中的通信。
C C++ 数据结构 链表 堆栈 C C C C C C C C C C C C C C
一个将C++头文件转JAVA JNA接口类的工具类,方便java程序调用C++ DLL的接口