Java与C++对比学习

c++ string类的substr()方法中的第二个参数为长度;

Java String类的substring()方法中的第二个参数为不包括的结束位置;

python中的字符串由 [start : end] 获得,两个参数含义和java一致;

 

java中不能直接修改字符串的值,只能通过其他操作的组合实现。

 

c++ compare()函数功能比java equals()丰富。

 

java字符串中一个字符为一个码点,一个码点可能是2个代码单元

java遍历字符串可用:int cp = sentence.codePointAt(i);

 

%,.2f 格式,用逗号分隔整数;

%,(.2f 格式,将负号放在()内;

 

c++中代码块内部可以重新定义外部变量,而java不行

 

一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。

很多人错误地认为Java 对象变量与C++ 的引用类似。然而, 在C++ 中没有空引用, 并且引用不能被赋值。可以将Java 的对象变量看作C++ 的对象指针。

 

final ClasseName objectValue相当于指针常量,指向的对象可以变化,但是不能指向其他对象

 

c++中,一个构造器不能调用另一个构造器,但是java中可以,这样可以不用编写重复构造器方法。如Student(Name)中调用Student(Name, Age),它们都属于同一个类的构造函数。

 

c++中有初始化列表,Java中有初始化块语法,一般建议将其放在域定义后,防止循环定义;同样,静态域也有静态初始化代码块,在普通代码块前加static。

 

c++有析构函数,而由于Java 有自动的垃圾回收器,不需要人工回收内存, 所以Java 不支持析构器;但如果需要释放内存外的其他资源,可以为类添加finalize方法,在垃圾回收前调用。

 

Java中的‘package’有点类似c++中的‘namespace’。一个package中的类可以掉用本package中的所有类,和其他package中的所有共有类。import语句类using语句,由于java能直接访问其它文件内部,所以不需要类似于c++中的#include语句(c++中不能直接访问其它文件内部)

 

Java包名和目录结构保持一致,编译器查找时不依赖目录结构,但是运行时的Java虚拟机依赖目录结构,否则无法查找运行

静态导入,可以直接将类的静态域和静态方法用import static语句导入,后面方便直接调用函数名

 

Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承

 

Java内部变量与外部变量相同时,内部变量用this.

 

Java 中使用关键字super 调用超类的方法, 而在C++ 中则采用超类名加上 :: 操作符的形式。例如,  在Manager 类的getSalary 方法中, 应该将super.getSalary 替换为Employee::getSalary

 

Java关键字this 有两个用途: 一是引用隐式参数, 二是调用该类其他的构造器, 同样,super 关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。在C++ 的构造函数中, 使用初始化列表语法调用超类的构造函数。

 

Java 中, 不需要将方法声明为虚拟方法。动态绑定是默认的处理方式。如果不希望让一个方法具有虚拟特征, 可以将它标记为final

 

Java中抽象类有专门的关键字abstract修饰,抽象类中可以没有抽象方法;而c++中没有抽象类关键字,只要类中有纯虚函数,就是抽象类

 

Java中ArrayList 类似于C++ 的vector 模板。ArrayList 与vector 都是泛型类型。但是C++ 的vector 模板为了便于访问元素重栽了[ ] 运算符。由于Java 没有运算符重栽,所以必须调用显式的方法。此外,C++ 向量是值拷贝。如果a 和b 是两个向量, 賦值操作a = b 将会构造一个与b 长度相同的新向量a, 并将所有的元素由b 拷贝到a, 而在Java 中, 这条赋值语句的操作结果是让a 和b 引用同一个数组列表。Java中的模板类拥有“棱形”语法

Java中也有Vector,但是没有任何理由选择Vector而不用ArrayList。

 

Java中的模板类中不能放置基本类型,但有时需要在其中放置整数,因此有了包装器类:Integer、 Long、 Float、 Double、 Short、 Byte、 Character 、 Void 和Boolean ( 前6 个类派生于公共的超类Number),包装器类有自动装箱和拆箱的功能,即能将它们直接与基本类型相互转换。需要注意:判断两个包装器类是否相等(如两个integer类),用==会判断两个对象变量的引用是否相等,应该用equals方法判断;将包装器类对象作为函数参数传入无法修改值。

 

Java中enum和class、interface的地位一样,默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。枚举类的构造器只能是私有的。

 

Java中由Class类保存对象运行时的类型标识

 

Java中由于不能多重继承,定义了 接口(取代抽象类的部分工作),一个类可以实现多个接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值