一、定义
C++: C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
Java: 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程
二、异同
JAVA | C++ | 异同 | |
---|---|---|---|
面向对象 | 是 | 是 | 面向对象有三个特性:封装、继承、多态。 封装:让系统模块化 继承:提高代码的复用性 多态:提高了代码的维护性和扩展性 举例:定义一个动物类,定义一个吃的方法。猫继承了动物,但是猫是吃鱼的;狗继承了动物,但是狗是吃骨头的 |
语言类型 | 编译性&解释性 | 编译性 | Java:程序源代码经过java编译器编译成字节码,然后由JVM执行 C++:源代码经过编译和链接后生成可执行的二进制代码.exe文件 java的执行速度比c/c++慢,但java能够跨平台,c/c++不能(.class/.exe) |
全局变量/全局函数 | 无 | 有 | Java:除了基本数据类型外,所有类型都是类 C++:兼容面向对象和面向过程编程的特点 |
指针 | 无 | 有 | 优点:有效防止c++中操作指针可能引起的系统问题,程序更安全(堆内存无法释放的问题) JAVA不能直接操作指针,使用指针。 |
多重继承 | 无 | 有 | Java:可以通过实现多个接口来实现与c++中多重继承类似的目的,因为接口也是具有多态性质 多重继承:容易出现二义性 |
管理内存 | 自动 | 手动 | c++:需要开发人员去管理内存的分配,包括申请与释放,通常把要释放的资源放到析构函数中 Java:提供垃圾回收机制式现垃圾自动回收,无需关心何时释放无用对象内存。当垃圾回收器将要释放无用对象的内存时,会首先调用该对象的finalize()方法 |
运算符重载 | 无 | 有 | 优点:代码简洁 operator+(a,b) |
预处理 | 无 | 有 | 提供的import机制和c++中预处理功能相似 |
默认函数参数 | 无 | 有 | |
goto语句 | 无 | 有 | 在Java中是保留字 |
自动强制类型转换 | 无 | 有 | 10 + 10.0 = 20.0 JAVA向上、向下转型 |
平台无关性 | 是 | Java:每种数据类型都分配固定长度,例如int类型总是占据32位 c/c++:同一数据类型在不同平台会分配不同的字节数 | |
对注释文档的内建支持 | 有 | 无 | 源码文件也可以包含他们自己的文档,通过一个单独的程序,可以将这些文档信息提取出来,并重新格式化成html |
标准库 | 有 | 无 | 例如提供用于访问数据库的jdbc库,用于实现分布式对象RMI等标准库 int arr[] = new int [10]; int len = sizeof(arr)/sizeof(arr[0]); arr.length |
三、JAVA的特性
1、Write once, run anywhere
这是基于JAVA的编译原理。JAVA代码先经过编译器编译成.class文件,然后不同平台的解释器都能解释此文件,同一个.class文件在不同的虚拟机会得到不同的机器指令,但运行结果相同。
2、安全性和健壮性
因为JAVA中提供了防止恶意代码攻击的安全机制(数组边界检测和ByteCode校验)等
例如java在创建数组的时候,也是一个对象
int[] intArray = new int[10]; 它会指定数组的长度,intArray.length = 10;只要数组创建了,每一个索引被初始化为默认值;不属于0–9的索引是无效的
会抛出异常ArrayIndexOutOfBoundException,而且数组存储在Java堆的连续内存空间,所以一旦声明是大小不能改变的,且如果自己没有初始化会
自动初始化。
另外,还提供强类型机制,垃圾回收器,异常处理和安全检测机制使java程序更有健壮性
3、平台无关性
对每种数据类型都分配固定长度的空间,例如int型总是占据32位;
C++ | JAVA | |
---|---|---|
32位 | char:1字节 int:4字节 long:4字节 | char:2字节 int:4字节 long:8字节 |
64位 | char:1字节 int:4字节 long:8字节 | char:2字节 int:4字节 long:8字节 |
4、严谨性和简洁性
去除了C++中容易混淆,不易理解的特性,如指针,头文件,运算符重载,多重继承等,程序更加严谨,简洁
5、实用性
Java提供很多内置库。例如提供对多线程的支持,网络通信的支持,极大的简化了开发人的程序设计工作
四、举例
从小例子中看出JAVA与C++的异同???
题目:(典型的约瑟夫环问题)已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,
数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周
围的人全部出列
思路:
约瑟夫环:
C++:
java: