JVM加载class过程

2018-07-09  本文已影响0人  海蟾子_null
public class Book {
    public static void main(String[] args) {
        staticFunction();
    }


    static Book book = new Book();

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

    {
        System.out.println("书的普通代码块");
    }

    Book() {
        System.out.println("书的构造方法");
        System.out.println("price=" + price + ",amount=" + amount);
    }

    public static void staticFunction() {
        System.out.println("书的静态方法");
        System.out.println(amount);
    }

    int price = 110;
    static int amount = 112;
}

从上面一个例子的结果进行分析。
先看执行结果:

书的普通代码块
书的构造方法
price=110,amount=0
书的静态代码块
书的静态方法
112

两道面试题,带你解析Java类加载机机制这篇文章里写的很详细。
这里大体写一下过程。

Java类加载7个过程

Java类加载分7个过程。分别是,加载,验证,准备,解析,初始化,使用,卸载

类加载
static Book book = new Book();
 static {
        System.out.println("书的静态代码块");
    }
 static int amount = 112;

其中new Book()进行对象初始化<init>().
执行的代码如下:

{
        System.out.println("书的普通代码块");
    }
int price = 110;
Book() {
        System.out.println("书的构造方法");
        System.out.println("price=" + price + ",amount=" + amount);
    }

两段代码合起来的执行过程如下:

{
        System.out.println("书的普通代码块");
    }
int price = 110;
 Book() {
        System.out.println("书的构造方法");
        System.out.println("price=" + price + ",amount=" + amount);
    }
static {
        System.out.println("书的静态代码块");
    }
static int amount = 112;
staticFunction();

从这里看到打印的结果:

书的普通代码块
书的构造方法
//此时amout还没有赋值,还是初始值。
price=110,amount=0
书的静态代码块
书的静态方法
112
上一篇 下一篇

猜你喜欢

热点阅读