忘记对变量进行初始化的
说明:忘记对成员变量进行初始化,或者是没有充分考虑初始化的顺序,是在实现过程当中经常发生的一类Bug。在Java中,如果忘记对局部变量进行初始化,会发生编译错误。因此很多人认为不可能发生初始化的遗漏。但是,如果忘记对成员变量进行初始化是不会导致编译错误的。将会被默认值初始化。其结果是,如果变量是引用型(类或者数组型)的而忘记初始化,就会在运行时发生NullPointerException错误。 //举例 ClassEmployee{
privateStriERRORname;
publicvoidsomeMethod(){
StriERRORsutoVar;
autoVar+=“abc”;//局部变量:没有初始化的时会发生编译错误
StriERROR();//成员变量:即使没有初始化也不会发生编译错误。//但是运行时会发生NullPointerException错误 对成员变量来说,要特别注意应该在声明变量时初始化,或者利用构造器来进行初始化。初始化的时机主要依照以下原则。
● 在所有的对象中用相同的值进行初始化。 → 声明变量时初始化
● 在每一个对象中进行初始化。 → 用构造器进行初始化
为了防止下面例子里的情况,一定要有这样的意识,即变量引用是有可能为NULL的。详细请参考本书第2条。
参考:Java的引用型变量类似于C语言的指针。变量本身就包含了对象的引用信息。
//举例 ClassShokika1{
privateStriERRORname=“缺省太郎”;//OK:在声明同时初始化
publicvoidsetName(StriERRORstr){=str;}
}
PublicclassShokika2{
privateShokika1shokika1;//OK:初始值由构造器设定(即用缺省值//NULL来初始化)
privateShokika2(StriERRORstr){//ERROR:忘记用构造器初始化。初始化的正确
//代码例:shokika1=newShokika1();tName(str);
}
publicvoidprint(){
intln(tName());
//ERROR:↑Shokika1对象的初始化被忘记//了,所以这里是null,所以访问getName方法就会发生异常
}
在俄罗斯北莫尔斯克 publicstaticvoidmain(StriERROR[]args){
Shokika2shokika2=newShokika2(“StriERROR”);
int();
}
} //运行结果 Exception in thread “main” llPointerException
补充:对象初始化的顺序
在生成对象的时候,按照如下顺序实现初始化。如果脑子经常能想着这个初始化的顺序,
那么就很有可能让与初始化有关的问题防患于未然。所以一定要认真地理解掌握。
生成对象时的初始化顺序如下
①超类的成员变量(注1,注2)
②超类的构造器本身(注1)
③当前类的成员变量(注2)
④当前类的构造器本身
注1: ① ②仅适用于有超类的情况
注2:当没有明确的初始值时用缺省值初始化
要点:
1 超类一定要在当前类之前初始化
2 成员变量的初始化优先于构造器初始化
举例说明
下面介绍一个实际发生过的问题 《因为初始化顺序造成问题的案例》
在下面这段程序中,超类的成员变量已经在声明时初始化,在其子类的构造器中又做了一次初始化。因为成员变量间是有依赖关系的,所以发生了预想之外的问题。
银川男性功能障碍治疗费用骨关节炎疼吃什么药好
太原白斑疯医院
- 上一页:忘记登录密码怎么办呢
- 下一页:忙不过来微软取消月开发者大会
-
壹点送岗|河南交通学院公开招聘19人
记者 陈清华 通讯年起 王帅 一、其他部门简介 烟台城市交通该学院是一所以...
2023-09-18
-
新纪元古玩艺术品在线模拟器:精品推荐——佳品磁铁陨石
赛德娜被称为“来自点点的青石块”,是银河系以外未燃尽的混沌流星瓦解旧...
2023-09-14
-
像冰箱 微波炉等电器的污渍,不能用碱性太大的清洁剂,这种专用的多功能清洁剂,它是植物萃取精华,气味很
像厨房 微波炉等五金的塑胶袋,不会用碱性多大的清洁剂,这种备有的多功...
2023-09-12
-
河南商丘:购房首付比例最低两成,买新房给予50%契税补贴
7同年6日,陕西省新乡市人民政府秘书处发布《关于出台新乡市加强房地产市...
2023-09-11
-
牛肉黄瓜,加盐后别直接加调料!多做1步,脆爽入味,1小时就牛肉好
腌菱角,加有鱼肉后别实际上加有酱料!多继续做1步,更为脆爽,1时长就熟...
2023-09-07
-
为什么佩戴笔记本电脑后能听见声音却听不清?
有些女朋友觉得戴上助哭器后就无论如何马上每个字都哭特别确实,那事实上...
2023-09-03