编译器并不是为每个引用都创建默认的对象,以此来避开不必要的负担。
但是,如果想初始化这些引用,可以在代码的下面位置进行初始化。
1、在定义对象的时候进行初始化(直接手动初始化)
2、在构造器中进行初始化
3、惰性初始化(使用到时才进行初始化)
4、使用实例初始化(代码块初始化)
代码:
class Soap { private String s; Soap(){ System.out.println("one Soap() Constructor"); s="constructed"; } @Override public String toString() { return s ; } } public class Bath{ //定义对象初始化 private String s1="happy",s2="happy",s3,s4; private int i; private float f; private Soap soap; //构造器初始化 Bath(){ s3="Joy_01"; f=3.14f; soap=new Soap(); } //实例初始化 { i=10; System.out.println("i=="+i); } public String toString(){ //惰性初始化,也就是说在用到的时候才进行初始化 if(s4==null){ s4="Joy_02"; System.out.println("Joy_02"); } return "s1="+s1+"\n"+ "s2="+s2+"\n"+ "s3="+s3+"\n"+ "s4="+s4+"\n"+ "i="+i+"\n"+ "source="+soap; } public static void main(String[] args) { Bath bath = new Bath(); System.out.println(bath); } }
由上图可以知道,初始化顺序:
①定义对象初始化>②实例初始化>③构造器初始化>④惰性初始化
文章评论