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