Java 类通过 new 关键字创建对象,在创建对象的时候,由于类中间的属性和方法有不同的修饰符,所以属性和方法在初始化的时候,会有不同的顺序。分两种情况分析:
一 无继承父类
无继承父类,是指忽略默认继承 Object 类
1 按照从上到下的顺序构建静态属性、静态块,静态属性和静态块只执行一次。
2 按照从上到下的顺序构建非静态属性 、非静态块
3 执行构造方法
package com.wanmait;
public class Student {
Student(){//6
System.out.println("构造方法");
}
private static int a = 10;//2
static {//3
System.out.println("静态块");
}
private int b = 10;//4
{//5
System.out.println("非静态块");
}
public static void main(String[] args) {
Student student = new Student();//1
}
}2 和 3 是静态属性和静态块,按照从上到下的顺序先执行
4 和 5 是非静态属性和非静态块,按照从上到下的顺序再执行
构造方法最后执行。
二 有继承父类
1 按照从上到下的顺序,执行父类的静态属性和静态程序块
2 按照从上到下的顺序,执行子类的静态属性和静态程序块
3 按照从上到下的顺序,执行父类的非静态属性和非静态程序块
4 父类构造方法
5 按照从上到下的书匈奴,执行子类的非静态属性和非静态程序块’
6 子类的构造方法
package com.wanmait;
public class Person {
private static int pa = 10;//2
static {//3
System.out.println("父类静态程序块");
}
private int pb = 10;//6
{//7
System.out.println("父类非静态程序块");
}
public Person()//8
{
System.out.println("父类构造方法");
}
}package com.wanmait;
public class Student extends Person{
Student(){//11
System.out.println("子类构造方法");
}
private static int a = 10;//4
static {//5
System.out.println("子类静态块");
}
private int b = 10;//9
{//10
System.out.println("子类非静态块");
}
public static void main(String[] args) {
Student student = new Student();//1
}
}
注意:
1 类的非静态属性不能创建类自己本身的对象
2 类的静态属性可以创建自己类本身的对象,执行非静态属性,非静态程序块以及构造方法

0条评论
点击登录参与评论