今日所学:1.回顾昨天所学隐藏、覆盖和动态绑定
2. 对象的初始化顺序
1>对象被创建的过程
了解: JVM ( Java虚拟机) 有一个”方法区“ new的时候 JVM会在方法区寻找类class的对象 例如: new People( ) 如果找不到 就会到定义classpath 路径里面去找People.class
2>加载成功后 就可使用该类 对于本包或者导入的包都可以直接new
3>分配内存空间 : 找到类之后 new之后会在JVM内存中的“堆”里面开辟空间,并且将对象的属性初始化默认值
4.对象初始化顺序
总: 先父类后子类 先静态后实例 先默认值后执行赋值语句
给父类的静态变量赋予默认值
给子类静态变量赋予默认值
执行父类的静态变量赋值语句
执行子类的静态变量赋值语句
执行父类静态块
执行子类静态块
给父类实例变量赋初值
执行父类的实例变量语句
给子类实例变量赋初值
执行子类实例变量赋值语句
执行父类构造函数
执行子类构造函数
综上, 完成了对象的初始化。
下面截图即代码为对其对象初始化顺序的演示
public class Testclass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// int a=(int)20.1;//强制转换
new Student();
}
}
class people{
int age;//
static int svar;
static int sv=20;//赋值语句
int b=30;//赋值语句
public people(){
System.out.println("父类的静态变量 svar="+svar);
System.out.println("父类的实例变量age="+age);
System.out.println("执行父类无参构造函数");
}
static{
System.out.println("在静态块中查看静态变量的赋值情况,svar="+svar);//验证是否在执行静态块之前静态变量已赋值
System.out.println("执行父类静态块");
}
}
class Student extends people{
int id;
static int svar1;
public Student(){
System.out.println("子类的静态变量 svar1="+svar1);
System.out.println("父类的实例变量id="+id);
System.out.println("执行子类无参构造函数");
}
static{
System.out.println("在静态块中查看静态变量的赋值情况,svar1="+svar1);//验证是否在执行静态块之前静态变量已赋值
System.out.println("执行子类静态块");
}
}