`
isiqi
  • 浏览: 16483685 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java与c,c++的区别

阅读更多

javacc++的区别:Java=C++-“复杂性和奇异性”+“安全性和可移植性”

1.全局变量

java中不能在所有类之外定义全局变量,只能通过在一个类中定义公共、静态的变量来实现一个全局变量。

java对全局变量进行了更好的封装,而在cc++中,依赖于不加封装的全局变量,常常造成系统的崩溃。

2.指针

cc++中的指针最灵活,但也是最容易产生错误的数据类型,由指针所进行的内存地址操作常常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个c++中的私有成员,从而破坏了安全性,造成系统的崩溃。而java对指针进行了完全控制,java没有显式的指针类型,所有引用的对象(包括变量赋值、传递参数给方法以及数组元素)都是通过使用隐式引用,而不是通过指针来完成的。

java中,引用还使用户容易创建诸如链接表之类的结构,而不需要显式指针,仅用指向下一个和前一个结点的变量创建一个链表结构,然后,在表中插入项目,把这些变量赋给其他结点对象。

3.数组

java中,数组是第一个特殊的类对象,而引用数组和它们的内容是通过显式引用而不是使用指针运算来完成的。数组的边界是要求严格检查的,一旦越界,将会产生编译或运行错误。如同其他对象一样,把数组传递给方法,就会传递原先的引用(地址)给该数组。因而,该数组引用的内容改变,更新原先数组对象。对象数组是引用数组,其初始化时并不包含实际的对象。

java并不像cc++那样支持多维数组,在java中,用户可以创建包含其他数组的数组来支持多维数组。

4.字符串

cc++中,字符串是以一个空字符(\0)结尾的字符数组。为了操作和管理字符串,必须把它们当作其他数组来处理。

java中,字符串是个封装的对象,而在字符串上操作的所有方法可把字符串作为一个完全的对象来处理。字符串即使可以用一个空字符结尾,也不能超越字符串终结的范围(如同数组的情况一样,字符串的边界检查是严格执行的)。

cc++可以通过指针直接对字符串所在的内存地址进行操作,并不对越界情况进行检查,而java只能通过类StringStringBuffer所提供的接口对字符串进行操作,并且还要对越界情况进行检测并报告,大大增加了安全性。由于类StringStringBuffer的接口都经过明确说明,所以我们可以预知java中字符串处理的功能,而在cc++中,只能通过库函数或者自定义函数才能对字符串进行处理。

5.内存管理

c中,程序员是通过库函数malloc()free()来分配和释放内存的。C++则是通过运算符newdelete来分配和释放内存的。如果再次释放已释放过的内存块或未被分配的内存块,会造成系统崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。

java中,所有对象均通过运算符new为它们分配内存空间。通过new获得对象的处理权,而实际分配给对象的内存可能随程序运行而改变,java对此自动地进行管理,而当对象不再使用时,运行时间的垃圾收集器(Garbage CollectorGC)就释放该内存。为了“强迫”释放一个对象,移去该对象的所有引用(指定所有变量和数组元素,保持为空),下次java垃圾收集器运行时,回收该对象。如此,有效地防止由于程序员的误操作而导致的错误,并且更好地利用了系统资源。

6.数据类型

cc++中,对于不同的平台,编译器对基本的数据类型(charintfloat等)分配不同长度的字节数,如intIBM PC中卫16位,在VAX-11中为32位,这导致了代码的不可移植性,而在java中所有的java的基本数据类型具有交叉平台和操作系统的一致长度和行为,总是分配固定长度的位数,如对int总是占32位,这就保证了java的平台无关性。Java没有CC++那样无符号数据类型。布尔类型的值不是一个整数,是具有truefalse两个值,虽然在java中可以强迫转换01到布尔类型,但是不能把它当作1来处理。

java中,组合(或称引用)数据类型(类,接口和数组)仅通过使用类定义来完成,像C++中支持类的structuniontypedef关键字均已去掉。

java中,数据类型之间的强制类型转换有许多控制,只有在不丢失信息时,才发生自动的强制类型转换,所有其他的强制类型转换必须是显式的,基本数据类型(intfloatlongcharboolean等)不能强制转换到对象,反之亦然;方法特殊的“包装”类,可以在对象和基本类型之间转换值。

7.运算符

运算度优先级和结合率作用与C中一样,然而new关键字结合性比点符号(·)高,其表现与c++不同。

java中没有C++中那样的重载运算符,此运算符以被删去,但可以使用“+”运算符来连接字符串。

8.控制流

java中,虽然ifwhilefordo在语法上和cc++一样,差别在于,每个控制流结构的测试表达式,必须返回一个实际的布尔值(truefalse),而在cc++中表达式可以返回一个整数。

java中,不支持CC++中的goto语句,而是通过例外处理(exception handling)语句try catchfinaly等代替cc++中用goto来处理遇到错误时跳转的情况,使程序更可读更结构化。

9.头文件

cc++中,用头文件来声明类的原型以及全局变量,库函数等。在大型系统中,维护这些头文件是很困难的。而java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员进行操作。同时javaimport语句来与其他类进行通信,以便使用它们的方法。

10.参数

Java不像cC++那样支持函数的变长参数表的机制,所有方法的定义必须具有特定的参数个数,此外,在空参数表中不能使用void

java中,命令行参数表现与在cC++中不同。在cc++中,参数的第一个元素(args[0])是程序的名字,在java中,args[0]对应cc++中的args[1],它没有办法获得保存java程序名称。

11.其他差别

(1)java中没有预处理程序,不支持宏和#define,当说明类和实例变量时,通过final关键字来声明一个常量。在cC++中用宏定义来实现的代码给程序的可读性带来了困难。

(2)java没有C++那样的模板类。

(3)java不包含cconst关键字,或者显式地按const引用传递的能力。

(4)java的所有函数必须是方法,而且必须依赖类。

(5)java通过接口(interface)提供单一与间接多重继承。

分享到:
评论

相关推荐

    各种学习资料 Android Python Java Java web C语言 C++ 教程 视频.zip

    各种学习资料 Android Python Java Java web C语言 C++ 汇编 Android逆向 Arm开发 51单片机 Photoshop 会声会影 Windows Unity cocos2dx 教程 视频 各种学习资料 Android Python Java Java web C语言 C++ 汇编 ...

    JAVA与C++的区别

    - C++起源于C语言,旨在保留C的高效性并引入面向对象编程的概念。C++在单机时代广泛应用,适用于系统开发和高性能计算。 - Java则是为了解决电子消费产品和互联网应用的需求而设计的。它强调可移植性、安全性,...

    The diffenences bwtween Java and C++ (JAVA与C++区别)

    ### JAVA与C++的区别 #### 摘要 本文旨在对比C++与Java这两种重要的计算机编程语言的特点。从复杂度、语法差异、内存管理等多个方面进行对比分析。 #### 关键词 C++;Java;差异 #### 引言 C++是一种广泛应用...

    Java与C/C++的区别(转).

    ### Java与C/C++的主要区别 #### 一、指针机制 在C/C++中,指针是一个重要的特性,提供了底层内存操作的能力。这使得程序员能够直接管理内存资源,但同时也带来了潜在的安全风险,比如野指针问题或内存泄漏等。而...

    Java转C++代码工具 J2C

    Java转C++代码工具J2C是一个专门用于将Java源代码转换为等效C++代码的工具。这个工具对于那些需要在不支持Java或者需要利用C++特定性能特性的环境中迁移Java项目的人来说非常有用。在深入探讨J2C之前,我们先理解...

    CPlus_to_Java_Converter;C++转java工具

    《C++到Java转换器:理解跨语言编程的挑战与实践》 在计算机科学领域,跨语言编程是一项关键技能,特别是在需要利用不同编程语言的优势时。C++和Java是两种广泛应用且具有各自特点的编程语言。C++以其高效、灵活和...

    java与C++互通加解密

    本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...

    java调用c c++程序实例

    在IT领域,跨语言通信是一项常见的任务,尤其是在Java和C/C++之间。Java因其平台无关性和丰富的库而广泛使用,而C/C++则以其高效和底层控制能力受到青睐。本实例探讨了如何在Java中调用C/C++编写的程序,以实现两者...

    java与c++通过socket通信

    Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...

    C++库封装JNI接口-实现java调用c++

    JNI是一套接口,它定义了Java虚拟机(JVM)如何与本地代码(如C++)通信。Java程序可以通过JNI调用本地方法,这些本地方法是用其他语言编写的,并通过JNI接口暴露给Java。这个过程涉及到以下几个步骤: 1. **创建...

    lua学习资料 实现java与c c++程序集成

    在"lua学习资料 实现java与c c++程序集成"这个主题中,我们将深入探讨如何利用Lua来实现与其他编程语言,特别是Java和C/C++的集成。 1. **Lua的语法**:Lua的语法简洁明了,易于学习。它支持变量、常量、数据类型...

    Java与C_C++异同

    ### Java与C/C++的主要异同点 #### 一、引言 随着计算机科学的发展,各种编程语言应运而生,其中Java、C和C++是最为广泛使用的三种语言之一。Java是由Sun Microsystems公司于1995年推出的一种完全面向对象的编程...

    JAVA与C++简介

    最后,JAVA没有采用C和C++中的"goto"语句,因为"goto"可能导致程序流程难以理解和维护。JAVA提倡使用结构化的控制流语句,如if、switch和while,以提高代码的可读性和可维护性。 总结来说,JAVA和C++在面向对象、...

    c/c++ 与java互通 AES加密解密,算法ECB

    压缩包里有两个工程,一个vc6.0一个myeclipse,本帖是修复贴,原帖地址c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING http://download.csdn.net/download/wangsonghiweed/4328267 -来自CSDN,有童鞋反映有...

    各种学习资料 Android Python Java Java web C语言 C++ 汇编 Android逆向 A.zip

    学习Java需要理解类、对象、接口、异常处理、多线程、集合框架等内容,并熟悉Java SE(标准版)和Java EE(企业版)的区别与应用场景。 4. **Java Web**:Java Web是指使用Java技术开发的Web应用程序,包括Servlet...

    Java programming for C++ developers

    3. **指针的缺失**:Java不支持指针操作,这与C/C++中的指针使用有很大的区别。Java通过对象来管理内存,而对象的引用则用来代替传统的指针概念。 4. **全局变量的限制**:Java不鼓励使用全局变量,而是提倡通过类...

    C++转Java工具

    在JNI开发中,通常会编写Java代码来定义本地方法,然后使用JNI头文件生成对应的C/C++代码,编译后与Java字节码一起运行。 C++转Java工具的工作原理可能包括语法解析、类型映射和代码重构等步骤。它会读取C++源代码...

    《C++ for Java Programmers》高清完整英文PDF版

    书中强调了C++与Java之间的差异,并着重介绍了C++的底层C风格细节。书中的章节涵盖C++哲学、最简单的C++、指针和引用变量、基于对象的编程:类、运算符重载、面向对象的编程:继承、模板、异常控制流、输入和输出、...

Global site tag (gtag.js) - Google Analytics