C程序员的Java指南

C程序员的Java指南

缘起

因工作缘由从Windows客户端开发转为Android客户端开发,所以主要的开发语言也由C++变为了Java,在学习Java的进程中,即享受到Java的自带程序库的丰富带来的便捷,也遇到一些与C++里的习惯不符需要注意的地方。

初学时的计划是看完1本Java教材,进程中整理C++程序员学习Java需要注意的点,然后对比写一篇《C++程序员的Java指南》,但最后懒癌犯了,只整理了一部分不同点,要构成一份「指南」还有很长的路要走,暂且把这个坑挖在这里,如果哪天心血来潮就填上。

一个知乎问答下有我的答案,与本篇文章内容同步:习惯写C++的人突然转去写Java,会有什么样的坑?

不同点

char是两个字节(字符及字符串默许都是utf-16)。

浮点数默许是double,所以要写成floatf=(float)5.0或5.0f,不然会报错。

整数除整数可能致使除零异常,而浮点数不会。

break和continue能够使用flag来跳出和继续指定循环。

boolean值只能是true和false,不能从整形等其它值转换而来。用于字符串连接的时候会自动转换成「true」和「false」。

if里只能接受boolean值,所以C++里的好习惯if(5==var)在Java里不再必要,少写了一个=的时候IDE和编译器都会提示你。

newPerson();必须有(),否则编译不过。

数组的声明方式推荐int[]nArray=newint[4];或int[]nArray={1,2,3};,第一种称为动态初始化,第二种称为静态初始化。动态初始化时,系统按以下规则分配初始值:整形为0,浮点型为0.0,字符型为’\u’,布尔型为false,援用类型为null。

当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量履行初始化。

访问控制符有private、default、protected、public。private只能在同一个类中访问,default能在同一个类、同一个包中访问,protected能在同一个类、同一个包、子类中访问,public能在全局范围内访问。

在构造器中可以使用this(params)来调用本类的其它构造器,使用super(params)来调用父类构造器,只能书写在本构造器第一行,所以它们不能同时出现。

使用super调用父类中的实例方法,使用父类类名调用父类中的类方法。

如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问和重写该方法。

java中有instanceof运算符,c++中对应的RTTI方式是(typeid)?instanceof运算符的前一个操作数通常是一个援用类型的变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是不是是后面的类,或其子类、实现类的实例。如果是,则返回true,否则返回false。判断是不是是同一个类的实例时应使用tClass()==tClass()。

初始化块和声明属性时指定初始值,这些按源程序中排列顺序履行。

java中只有值传递。

对private方法,即便它使用final修饰,在子类中也可以定义一个相同的,由于这是子类定义了一个新方法,并不是重写。

final和abstract永久不能同时使用;static和abstrace不能同时修饰某个方法;private和abstrace不能同时修饰某个方法。

java中的abstract方法不能有方法体,c++中的purevirtual函数可以有实现。

interface的方法只能是publicabstract的,属性只能是publicstaticfinal的,使用private等修饰编译会报错。

从内部类里援用外部类的属性或方法时,可以用命is.。

非静态内部类里不能有静态成员。

内部类可以使用static修饰,外部类不行。

从外部类外创建内部非静态类的语法:nerClassvarName=wInnerConstructor();从外部类外创建内部静态类的语法:nerClassvarName=nerConstructor();

内部类不可能被外部类的子类中重写,由于命名空间不同。

纠误一处:《疯狂Java讲义》P讲道「如果匿名内部类需要访问外部类的局部变量,则必须使用final修饰符来修饰外部类的局部变量,否则系统将报错。经验证,只要这个局部变量在后续不改变其值,即便它不以final修饰,但实际表现是有效的final时,在Java8环境下编译后会自动为它加上final,不报错。

switch表达式可以使用整形或枚举类实例。

Set判断两个对象是不是相同不是使用==运算符,而是根据equals方法。

HashSet判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。









































如何治白癜风
小儿白癜风治疗方法


转载请注明:http://www.guweiclothing.com/zycs/1026.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: