c++和java语言特性的不同(一个c++开发者眼中的java)

来源:互联网 发布:大数据商务拓展怎么做 编辑:程序博客网 时间:2024/05/01 03:29

最近java越来越流行就利用空闲时间了解一下java,总体来说对于一个c++开发者来说还是很容易上手的,但是还是又一些跟c++不同的地方需要注意。

1 数据类型

    c++:在c++中可以分为内置数据类型和自定义数据类型(类,struct等),这些数据类型又可以分为指针和非指针类型

    java:在java中和c++有一些不同,java中分为内置数据类型和引用数据类型,除了内置类型(byte,short,int,long,float,double,boolean,char)以外都是引用类型,比如数组,字典,对象等,这就意味着这些类型作为参数是是引用传递的,这和c++有着很大的区别,在c++中这些可以是值传递的。

2 常量

    c++:const来声明      java:final来声明

3 类成员变量的访问权限

    c++:在c++中有public,private,和protect三种类型

    java:java中也有以上三种权限并且其含义也大致无异,初次之外比c++多一种类型叫做defalut即默认类型不加任何修饰符的成员,此时这些类型只能在同一包中可见,这里和c++有明显的不同,c++中默认为private类型。

4 继承

    c++:在c++中继承基本上没有什么限制(有虚函数的除外),虽然这么说一般我们避免过于复杂的多继承

    java:在java中继承有一些不同,java中可以有两种继承方式,extends只能实现单继承,即它只能有一个父类,implements可以实现多继承,继承多个父类或者接口,java中所有对象都继承自object类,而c++没有统一的父类。

5 接口

    c++:c++中其实没有真正的接口的定义,在c++中通过纯虚类即抽象类(含有纯虚函数的类)来实现接口。

    java:java中有interface关键字来实现接口,但是他和c++的有很大的区别,首先java中的interface它不是类,这是最大的区别,其次他的每一个方法都是抽象方法,不能有成员变量(除了static和final变量),不能有构造方法,最重要的是它不是被子类继承了而是被实现了(对于c++来说其实是继承了接口,并实现了其中的抽象方法)。说到这c++的接口跟java的抽象类更相似一点,感觉java的抽象类跟c++的接口(抽象类)差不多。只是java特殊的实现了接口的定义,而c++没有。

6 this

    c++:c++中是一个隐藏的指向自己指针,可以通过指针访问自身的成员变量和函数,

    java:this是一个指向自己的引用,通过this同样可以访问自己的成员变量和函数,但是java中可以在构造函数中通过this调用另外一个构造函数,这在c++中是不允许的。

7 文件管理

    c++:c++中继承了c的特点,通过#include并结合namespace来实现。

    java:java主要通过包package来实现程序文件的管理,和golang的很像,引入包都是通过import来实现,因该是golang在实现上借鉴了java包管理

8 模版函数和模版类

    c++:c++中的模版参数可以是参数类型也可以是非参数类型(比如一个int值)  

    java:java中模版参数只能是参数类型

9 多态

    c++:c++中的多态(这里只讨论运行时多态)通过virtual函数实现

    java:java中的多态实现方式跟c++有很大的区别,她可以通过重写,接口,抽象类和抽象方法来实现,可以这么认为java中的普通的非静态成员函数都是virtual,当你在子类中重写了该方法就可以实现多态,而c++中必须通过virtual生命才能实现多态,这点很重要。

10 类

    java的类和c++的类有些设计上的不同,java可以用public来声明类,此时java的源文件名必须和类名相同,并且一个文件只能有一个public 类,而c++中public只能用来声明类的成员。在 Java 中,类定义采取几乎和 C++一样的形式。但没有标志结束的分号。没有 class foo 这种形式的类前向声明,只有类定义。

11 语言类型

    c++:编译型,手动管理内存。 java:解释型,运行在java虚拟机之上,系统管理内存。

12 编程思想

    c++:面相对象也可面向过程(不推荐)  java:面相对象

13 作用域符号::

    Java 中没有作用域范围运算符“ ::”。 Java 利用点号做所有的事情,因为只能在一个类里定义元素。即使那些方法定义,也必须在一个类的内部,所以根本没有必要指定作用域的范围。还有对 static 方法的调用:使用 ClassName.methodName()。Java 中不必进行提前声明。若想在定义前使用一个类或方法,只需直接使用它即可, 编译器会保证使用恰当的定义。

14 运算符

    Java 增添了无符号右移位运算符“ >>>”,忽略符号位,符号位补0。“ >>”则会在移位的同时插入符号位(即“算术”移位)。

15 内存管理

    c++对象可以在栈上,堆上或者静态存储区,java所有对象都在堆上,c++需要程序员手动进行内存管理,而java则不需要,java虚拟机会自动帮助我们管理内存,但是如果我们写出了错误的程序,java虚拟机有时候也无能为力。

16  预处理

    Java 没有预处理机。若想 使用另一个库里的类,只需使用import 命令,并指定库名即可。不存在类似于c++预处理机的宏。

17 构造函数

   java和c++一样有构造函数,但是java没有copy构造和移动构造(c++11),因为java所有对象都是引用传递。

暂时了解到这么多,以后慢慢补充


0 0
原创粉丝点击