//Person p声明一个变量,在栈里面分配空间.
//Person p = new Person("zhangquan", 20)
//1.new 用到了Person.class,先在硬盘上找到Person.class加载到内存.jvm做的事情.
//2.执行Person 类里面的stati {}静态块.
//3.分配堆空间,在内存里面建立对象属性.默认初始化.
//4.构造块{}执行.
//5.构造函数执行
//6.将堆空间地址给栈内存变量p.
//静态成员只能被静态方法调用,不能被飞静态成员调用.
//静态成员.方法可以通过类名字来调用.
class Test2 {
public static void main(String [] args) {
Demon.show(8); //b c //不一定要实例化才加载类到内存里面去. 调用静态方法时,static {}也被调用了.</span>
//new Demon(); //b d a
}
}
class Demon {
int num = 4;
//构造函数私有后就不能被实例化了.防止别人实例化
//private Demon(){
Demon(){
System.out.println("a"); //实例化后才被调用构造函数.
}
static {
System.out.println("b");
//System.out.println("satic {}"+num); //只能访问静态的变量.所以错误.
}
static void show(int x) {
System.out.println("c");
//System.out.println("show"+num);//静态方法,只能访问静态的变量.所以错误
}
//这个只有实例化才被调用.构造快.
{
System.out.println("d");
System.out.println("{}"+num);//可以访问成员变量.不能访问静态成员.
}
}