c++和java比较

来源:互联网 发布:淘宝男装品牌销量排行 编辑:程序博客网 时间:2024/04/29 15:57

刚刚把java编程思想这本书大致看了一遍,主要是和c++做一下对比:
1、和c++的编程风格不同,其实linux的编程风格和wins下也不同,但是java整个是统一的。
2、和c++相比,java有着更彻底OOP思想。一切皆是对象。
3、它的基本语法和c++基本相同,不管是操作符还是控制流程,但是也有很多不同点,现总结一二:
1)、java引入package概念,C++默认权限是private,而java就有一个单独的默认权限(同属一个package)。
2)、c++有静态库和动态库之分,但是java只有package,好像是首次用时才用虚拟机加载。但是两个程序同时用到一个package会共享吗?好像不会啊,浪费啊;c++的动态库是可以的啊。
3)、C++于底层系统打交道,所以很多字符长度跟系统有关系,而java本身不和操作系统打交道,所以所有字符长度固定,没有sizeof。
4)、在容器中,C++没有边界检查,而java有边界检查。
5)、C++中在调用方法之前必须先申明,但是java好像不用。
6)、最重要的区别,java抛弃了曾经让我头疼不已的指针的概念。
7)、c++ enum是基本类型,java是class。
8)、java丢弃了操作符重载。
9)、c++允许多继承(坑爹的设计)、java只允许单继承,但是可以从多个接口继承。
10)、c++方法可以声明为虚函数, 虚函数是在运行期根据对象的类型才确定的. c++方法缺省情况下不是虚的,在java里,方法缺省情况下是虚的, 但可以使用final关键字使之声明为非虚的
4、java引入虚拟器的概念,把很多原本要与操作系统打交道的事情给取消了,最明显的并发(多线程、同步、资源共享、原子操作)。我们在linux编程我们需要熟悉Linux的库函数,在wins上编程我们又要熟悉wins的库函数,这些原本属于系统API,在java中他们属于JDK,只要有java虚拟器,你的程序就可以跑,真正做到了“一次编码,到处运行”。很明显java虚拟机屏蔽了
操作系统层面的差异,他在虚拟机上调用了操作系统的API;很多方法仍能看到系统API的踪迹,比如NIO中selector就是利用linux的seletct的系统函数实现的。
5、java也引入了很多新的概念,比如:注解(内置注解好像满有用的,自定义注解还没有发现它的用去)、接口、反射机制、动态代理、final(和C++ const 差不多,但是可以修饰class),垃圾回收机制(好东西,省的我每次写delete啦,但是自己不能控制自己内存释放的时机,不开心啊)
6、java的I/O系统函数库也太多了,但是所有类库均继承(InputStream、OutputStream、Reader、Writer)接口。实现一种功能有好多种方式实现,但性能就。。。。
7、java和c++有很多基本类似的地方,比如:多态、容器、泛型(模板)等等。
其实C++和java还有很多不同点,这些所有的来源都是java有自己的运行平台(JVM),java离不开JVM啊,对用户来说好坑啊,C++依赖的系统API。java代码的移植行很好啊,一个jar包下下来就可以用啦,下一个dll可能要花费很久在debug上。但是在性能上java应该比不上c++,毕竟c++调用的是系统API。比如linux2.6版本推出了epoll,丢弃了select(每次轮询太耗时间啦),但是java的selector实现原理应该是调用的select。

0 0
原创粉丝点击