Java 类的初始化和实例的初始化

Java 类的初始化和实例的初始化

类的初始化

  • 一个子类初始化要先初始化他的父类

  • 一个类初始化就是执行clinit方法

在这里插入图片描述

  • 这里我们注意 这里的初始化是对静态变量和静态代码块进行初始化 而他们两执行的先后顺序就是看谁写在前面 谁写在后面

实例的初始化

实例的初始化就是执行init方法

  • init方法由3部分组成 分别是 非静态的实例变量 非静态代码块 对应构造器代码组成
  • 非静态实例变量的赋值和非静态代码块从上到下按顺序执行 对应的构造器代码最后执行
  • init方法首先执行父类的init方法

总结

  • 触发初始化的执行顺序
    1)父类的静态成员变量和static代码块
    2)子类的静态成员变量和static代码块
    3)父类的普通成员变量和非static代码块
    4)父类的构造方法
    5)子类的普通成员变量和非static代码块
    6)子类的构造方法

我们来看一个例子

package com.zyk;

class HelloA {
    private static  int i=method();

    public static int method(){
        System.out.println("父类的静态变量");
        return 1;
    }

    public HelloA() {
        System.out.println("HelloA");
    }

    { System.out.println("I'm A class"); }

    static { System.out.println("父类的静态代码块  static A"); }
}
public class HelloB extends HelloA {
    private static  int i=method();

    public static int method(){
        System.out.println("子类的静态变量");
        return 1;
    }
    public HelloB() {
        System.out.println("HelloB");
    }

    { System.out.println("I'm B class"); }

    static { System.out.println("子类的静态代码块  static B"); }

    public static void main(String[] args) {
        new HelloB();
    }
}

运行结果

父类的静态变量
父类的静态代码块  static A
子类的静态变量
子类的静态代码块  static B
I'm A class
HelloA
I'm B class
HelloB
发布了39 篇原创文章 · 获赞 19 · 访问量 1469

猜你喜欢

转载自blog.csdn.net/weixin_44222272/article/details/105517938