详述对象初始化过程
用new创建并初始化对象步骤:
1、给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
2、成员变量声明时的初始化;
3、初始化块初始化(又称为构造代码块或非静态代码块);
4、构造方法初始化
public class Student{
String name="张三";
//执行非静态代码块时,对象已经创建,否则this.name会出现错误
{
System.out.println("非静态代码块"+this.name);
}
//调用构造函数时,对象已经存在了,否则this.name会出现错误
public Student(String name){
this.name = name;
System.out.println("构造方法"+name);
}
//程序运行结果先输出张三,然后输出李四,可见一定先调用非静态代码块,再调用构造函数,并且调用非静态代码块时所创建对象的实例属性值为初始化值,或者是默认值(如果没有初始化)
public static void main(String[] args) {
Student student = new Student("李四");
}
}
运行结果:
public class Student{
String stuName = "";
int stuAge = -1;
String stuSex = "";
int stuGrade = -1;//成员变量声明时初始化
{
this.stuName = "雷静";
this.stuAge = 20;
this.stuSex = "女";
this.stuGrade = 2;
}//初始化块初始化
public Student() {
System.out.println("无参构造方法初始化");
}
public Student(String stuName,int stuAge,String stuSex,int stuGrade) {
this.stuName = stuName;
this.stuAge = stuAge;
this.stuSex = stuSex;
this.stuGrade = stuGrade;
}//构造方法初始化
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.stuName+student.stuAge+student.stuSex+student.stuGrade);
Student stu = new Student("王云",22,"女",4);
System.out.println(stu.stuName+stu.stuAge+stu.stuSex+stu.stuGrade);
}
}
运行结果: