企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## [成员初始化](https://lingcoder.gitee.io/onjava8/#/book/06-Housekeeping?id=%e6%88%90%e5%91%98%e5%88%9d%e5%a7%8b%e5%8c%96) Java 尽量保证所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,这种保证会以编译时错误的方式呈现,所以如果写成: ~~~ void f() { int i; i++; } ~~~ 你会得到一条错误信息,告诉你**i**可能尚未初始化。编译器可以为**i**赋一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽,所以采用默认值反而会掩盖这种失误。强制程序员提供一个初始值,往往能帮助找出程序里的 bug。 要是类的成员变量是基本类型,情况就会变得有些不同。正如在"万物皆对象"一章中所看到的,类的每个基本类型数据成员保证都会有一个初始值。下面的程序可以验证这类情况,并显示它们的值: ~~~ // housekeeping/InitialValues.java // Shows default initial values public class InitialValues { boolean t; char c; byte b; short s; int i; long l; float f; double d; InitialValues reference; void printInitialValues() { System.out.println("Data type Initial value"); System.out.println("boolean " + t); System.out.println("char[" + c + "]"); System.out.println("byte " + b); System.out.println("short " + s); System.out.println("int " + i); System.out.println("long " + l); System.out.println("float " + f); System.out.println("double " + d); System.out.println("reference " + reference); } public static void main(String[] args) { new InitialValues().printInitialValues(); } } ~~~ 输出: ~~~ Data type Initial value boolean false char[NUL] byte 0 short 0 int 0 long 0 float 0.0 double 0.0 reference null ~~~ 可见尽管数据成员的初值没有给出,但它们确实有初值(char 值为 0,所以显示为空白)。所以这样至少不会出现"未初始化变量"的风险了。 在类里定义一个对象引用时,如果不将其初始化,那么引用就会被赋值为**null**。