成员初始化
Java尽力保证:所有变量在使用前都能够得到恰当的初始化 文章目录 ⚜未初始化 ⚜指定初始化 ⚜构造器初始化 ⚜初始化引用 ⚜初始化顺序 ⚜对象的创建过程 ⚜总结 未初始化 Java尽力保证所有变量在使用前都能得到恰当的初始化 对于方法的局部变量 如果没有初始化局部变量,使用时Java将以编译时错误的形式提醒我们进行初始化 对于类的数据成员 (/字段/域) 如果没有初始化数据成员,编译器会给数据成员赋上初值(对数字来说就是0,布尔值为false,char为[],之后会讲到原因),如果数据成员是对象引用,那么此引用会获得一个特殊值null 尽管这种方法效率似乎不高,但它的确能使初始化得到保证 指定初始化 如果想为某个变量赋值, 指定初始化是(优点)一种直观又简便的办法(在定义类成员变量的地方为其赋值) 注意: 如果没有为对象引用指定初值就尝试使用它,就会出现运行时错误 ”向前引用“会出现编译时错误,也就是说 在定义字段之前不能引用该字段 指定初始化(缺点)有一个限制,类的每个对象中使用指定初始化的字段都有相同的初始值 有时这正是我们所希望的, 但有时我们需要更大的灵活性,这时我们需要使用构造初始化 构造器初始化 构造器初始化这种说法已经足够直观,无需赘述。 其中需要注意的是:我们无法阻止自动初始化的进行,它将在构造器被调用之前发生。 初始化引用 就像我们之前提到的那样,编译器并不是简单地为每一个引用都创建默认对象,如果那么做的话,就会在很多情况下增加不必要的负担。 如果想初始化这些引用,可以在代码中的下列位置进行: 在定义对象的地方。这意味着它们总能够在构造器调用之前被初始化(指定初始化,下节会讲到初始化顺序) 在类的构造器中(构造器初始化) 就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。 使用实例初始化 初始化顺序 此节是本文的重点,我会在下面讲到初始化的顺序并会分析其原因,不过首先我们需要对static和继承有着基础的认识: static 说到初始化