C++和Java的异同

一、定义

C++:  C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

Java: 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程

二、异同


 JAVAC++异同
面向对象面向对象有三个特性:封装、继承、多态。
封装:让系统模块化
继承:提高代码的复用性
多态:提高了代码的维护性和扩展性
举例:定义一个动物类,定义一个吃的方法。猫继承了动物,但是猫是吃鱼的;狗继承了动物,但是狗是吃骨头的
语言类型编译性&解释性编译性

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:


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值