分类:
2008-09-12 13:09:50
第1条 忘记对变量进行初始化
说明:忘记对成员变量进行初始化,或者是没有充分考虑初始化的顺序,是在实现过程当中经常发生的一类Bug.在中,如果忘记对局部变量进行初始化,会发生编译错误。因此很多人认为不可能发生初始化的遗漏。但是,如果忘记对成员变量进行初始化是不会导致编译错误的。将会被默认值初始化。其结果是,如果变量是引用型(类或者数组型)的而忘记初始化,就会在运行时发生NullPointerException错误。
//举例
Class Employee{ private StriERROR name; public void someMethod(){ StriERROR sutoVar; autoVar += “abc”; //局部变量:没有初始化的时会发生编译错误 this.name.toStriERROR(); //成员变量:即使没有初始化也不会发生编译错误。//但是运行时会发生NullPointerException错误 |
对成员变量来说,要特别注意应该在声明变量时初始化,或者利用构造器来进行初始化。初始化的时机主要依照以下原则。
● 在所有的对象中用相同的值进行初始化。 → 声明变量时初始化
● 在每一个对象中进行初始化。 → 用构造器进行初始化
为了防止下面例子里的情况,一定要有这样的意识,即变量引用是有可能为NULL的。详细请参考本书第2条。
参考:的引用型变量类似于C语言的指针。变量本身就包含了对象的引用信息。
//举例
Class Shokika1{ |
补充:对象初始化的顺序
在生成对象的时候,按照如下顺序实现初始化。如果脑子经常能想着这个初始化的顺序,
那么就很有可能让与初始化有关的问题防患于未然。所以一定要认真地理解掌握。
生成对象时的初始化顺序如下
①超类的成员变量(注1,注2)
②超类的构造器本身(注1)
③当前类的成员变量(注2)
④当前类的构造器本身
注1: ① ②仅适用于有超类的情况
注2:当没有明确的初始值时用缺省值初始化
要点:
1 超类一定要在当前类之前初始化
2 成员变量的初始化优先于构造器初始化
举例说明
[1]