最近有点空闲时间,学习了Java语言。教材《Java简明教程》第四版,清华大学出版社。本人以前有C++基础,所以主要总结下两者区别。

一、基本类型和运算

1.布尔常量,true和false不是数值,不能进行算术运算。而C++实际是整型。

2.字符串常量,Java作为对象,有自己的属性和方法。C++,采用‘\0’结束的字符数组。

3.字符型变量,Java采用Unicode编码,长度为16位,最大值65535。而C++是8位,最大值128。

4.局部变量检查,当局部变量和外层如类中全局变量相同时,提示编译错误。Java认为相同的命名会容易导致对程序的误解和混淆。C++则“小范围变量屏蔽大范围变量”。

5.变量赋值,类中未给出初始化值,将默认为0,或者空等。而C++不确定的值。

在方法中,未给出初始值,Java无法通过编译。C++则不会。

6.类型转换,int x=2+3.14; C++编译通过。Java编译失败,必须改成如下进行强制转换:

       int x=2+(int)3.14;

7.引用,Java规定基本类型按值传递,对象类型按引用传递。返回值类似。但是Java引用是没有任何特殊标志,而C++则用‘&’表示。

8.%运算符,Java不但可以对整型运算,浮点型也可以。C++只能对整型运算。

总的来说,Java是一种强类型语言,对变量和常量的类型检验比较严格。但同时又具备更好的扩展性。

二、类和对象

1.首先,从编辑和文件管理而言,Java的类定义和实现放在一起。C++是分开的。

2.关键字this,Java中是特殊的引用,既可以指代对象,也可以指代构造函数(也只能放在构造函数的第一句,所以用在构造函数的重载函数中)。

    而C++中,this只能是指向自己的指针,没有指向函数的功能。

3.Object类,Java所有其他类的祖先。C++没这个概念。因为Java基于类设计语言,C++可以基于函数。

4.关键字super,当父类定义了默认构造函数即无参数构造函数,子类可以自动调用父类的该构造函数。

但是当父类定义了带参数的构造函数时,子类必须通过super调用父类的该构造函数。C++通过初始化列表。

5.关键字final,可以修饰变量和参数,相当于C++中的const。也能修饰类和方法,表示不能被继承,表示终极类和终极方法。

6.关键字abstract,修饰类和方法,表示抽象类和抽象方法,一般用来被继承。修饰方法时,类似于C++中的纯虚函数。

  

三、字符串处理

C++对字符串处理常用数组,没有提供字符串对象,如果想要使用对象,则需要自己封装。而Java提供了两个类和一系列方法。

1.String类,常量,值不会改变。注意,关系操作符‘==’用于地址比较,而equals方法,用于内容比较。

2.StringBuffer类,带缓冲区的字符串,值可以被改变。

3.运算操作符,操作符‘+’可以连接两个String对象,不能连接两个StringBuffer对象。Java取消了运算操作符,但保留了String的‘+’和‘+=’。

4.StringBuffer对象到String对象的转换,通过toString()方法。

5.其他,String对象可直接赋值,StringBuffer赋值则通过构造函数。

四、多线程

C++多线程往往需要自己编写。而Java标准库支持多线程。例如Java的垃圾回收器是一个低优先级的线程。

1.Java定义了一个类Thread和一个接口Runable。

2.采用synchronized实现多线程同步,协调资源,保护共享变量和方法。

3.多线程优先级,范围1-10,默认值5。

4.线程间通讯,主要有三个方法:wait(),notify(),notifyAll()。其中,wait()和notify()必须成对出现。

五、其他

1.Java先编译后解释执行,而C++是纯编译方式。所以后者执行速度快。

2.Java结构中立,字节码的中介方式,与运行平台无关。所以可移植性好。

3.Java的变量长度确定不变,与运行平台无关。如int类型都是四个字节。而C++不一样,跟平台有关。所以Java移植性比C++佳。

4.Java仅支持单继承,支持多接口(关键字interface)。C++支持多继承,甚至还可以虚拟继承。

目前学习到的主要区别是这些,欢迎批评指正。

  

Java语言与C++语言区别的更多相关文章

  1. [Java面试九]脚本语言知识总结.

    核心内容概述 1.JavaScript加强,涉及到ECMAScript语法.BOM对象.DOM对象以及事件. 2.Ajax传统编程. 3.jQuery框架,九种选择器为核心学习内容 4.JQuery ...

  2. Java语言与C++语言的差异总结

    Java的设计者曾说过,设计这门语言的灵感主要来自于C++. 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史.所以在Java语言学习过程中,将其与C++语言对比是 ...

  3. Java学习笔记--脚本语言支持API

    Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...

  4. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  5. java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  6. [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  7. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  8. Java编写的C语言词法分析器

    Java编写的C语言词法分析器 这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有 ...

  9. c语言exit和return区别,在fork和vfork中使用

    转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: ...

随机推荐

  1. Git详解之特殊工具

    前言 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你将领略到 ...

  2. flask使用blinker信号机制解耦业务代码解决ImportError: cannot import name 'app',以异步发送邮件为例

    百度了大半天,不知道怎么搞,直到学习了blinker才想到解决办法,因为之前写java都是文件分开的, 所以发送邮件业务代码也放到view里面,但是异步线程需要使用app,蛋疼的是其他模块不能从app ...

  3. ogg trail文件序列号不一致

    一.Cause 在某些情况下,对于一个已经running的OGG进程,对已同步的数据(正确的同步或者错误的同步)做修改,修改完之后,需要保持一个一致点,从一致点继续同步. 这时需要人工干涉产生一个新的 ...

  4. 《快乐编程大本营》java语言训练班 3课:java的运算符

    第1节. 算术运算符 第2节. 递增和递减运算符 第3节. 比较运算符 第4节. 逻辑运算符 第5节. 运算符优先级 第6节. 字符串运算 http://code6g.com/pxphp/px/ban ...

  5. 在Mysql中,事务是如何实现的呢?

    hello大家好,我是一个爱看底层的小码,对于每一个学习mysql数据库的同学来说,事务都是一个绕不开的话题,简单的说来事务是指访问并可能更新数据库中各项数据项的一个程序执行单元.事务的四个特征无非就 ...

  6. js笔记(1)--第一天记录

    刚刚接触JavaScript这门语言不久,所以希望每一次都记一点东西下来,巩固下知识. 首先,写了一个demo,是来计算两个数字的和的,如果直接把 v1=text1.value,和 v2=text2. ...

  7. 机器学习总结-bias–variance tradeoff

    bias–variance tradeoff 通过机器学习,我们可以从历史数据学到一个\(f\),使得对新的数据\(x\),可以利用学到的\(f\)得到输出值\(f(x)\).设我们不知道的真实的\( ...

  8. POJ_2185_二维KMP

    http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #incl ...

  9. 新的起航从这里开始 Encantado!

    大家好,我是一名DBA之前也在其它地方写过blog,但是可惜目前在greatwall之内都不能访问了. 如果有小伙伴可以在墙外访问的话 可以尝试着看看这个地址 https://liuleiit.wix ...

  10. SpringBoot Jpa 分页查询最新配置方式

    这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pagea ...