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条评论
点击登录参与评论