平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!
class内部模块(静态方法,静态块,静态变量,方法块等)执行顺序
在代码执行调用的时候,分两种情况,一种是有继承关系的,一种是无继承关系的。
1 父类:Father.java
package com.test.alltest.java.classExecuteOrder;
//父类
public class Father {
public static Father instance = null;//(1)
static {
System.out.println("执行父类静态代码块");//(2)
instance = new Father();//实例化一个父类对象
}
{
System.out.println("父类构造块");//(3)(7)(11)
}
public static void getFather(){
System.out.println("执行父类静态方法---调用的时候才执行");
}
public Father() {
System.out.println("执行父类构造方法");//(4)(8)(12)
}
}
2 子类:Child.java
package com.test.alltest.java.classExecuteOrder;
//子类
public class Child extends Father{
public static Child instance = null;//(5)
static {
System.out.println("执行子类静态代码块");//(6)
instance = new Child();//【实例化一个子类】
}
{
System.out.println("子类构造块");//(9)(13)
}
public static void getChild(){
System.out.println("执行子类静态方法---调用的时候才执行");
}
public Child() {
super();//这句有没有效果一样
System.out.println("执行子类构造方法");//(10)(14)
}
}
3 测试类:ClassExecuteOrder.java
package com.test.alltest.java.classExecuteOrder;
/**
* 测试类的执行顺序:
* (1)先父后子
* (2)父静态--》子静态--》父构造--》子构造
* (3)静态变量--》静态代码块--》构造块--》构造方法
*/
public class ClassExecuteOrder {
public static void main(String[] args) {
Child child = new Child();
System.out.println("child实例化完成!!");
}
}
4 测试结果
5 总结
(1)先说下没有继承关系的执行顺序:静态变量--->静态代码块-->构造块-->构造器。
(2)有继承关系的执行顺序是:父类的静态变量-->父类静态代码块-->子类的静态变量-->子类静态代码块--->父类构造块-->父类构造方法-->子类构造块-->子类构造方法。
(3)如果类定义中静态变量在静态代码块的下面,那么会优先执行静态代码块,然后执行静态变量!!也就是说:静态代码块和静态变量的执行顺序根代码顺序有关系!!
如果以上教程对您有帮助,为了不迷路或需要技术支持,请关注一下吧~