javacore1

2、Java Core 之 字节码与类创建过程

2.1、知识点

如图和代码
javacore1_第1张图片

把Hello类加载到方法区之后,是不是要执行main方法?执行main方法之后就压了一个栈进来。
注意这个栈啊:来了一个方法就压栈,执行完了就弹出去。!
当执行碰到new关键字的时候,会发生啥? 声明对象
看图中第 1 2 3步。

然后第2步单独拿出来讲:
看下堆内存中创建对象的时候执行顺序:
(加载的是分为,加载,验证,准备,解析,初始化,复习一下儿)
1、如图
2、如图 如上图左边的黑体字
是什么??? 类构造方法、

对堆内存中开辟的对象的结构进行讲解:
对象 = (头部信息 + 实例信息)
头部信息:(有三个标志位)
1、有填充值
2、持有指向方法区的指针。执行对象方法的时候那要 跑到方法区里的方法表里去查。然后static变量也要去 这里找撒。
3、描述信息(包含什么? 很重要,看图)
给对象加锁的时候,就是在描述信息里记一个id撒,

2.2、看一个小程序,分析一下底层的步骤。

//java代码
/**
 * 观察这个小程序的输出顺序,并思考为什么?
 * 输出:
 * 静态代码块
 * 普通代码块
 * 构造方法
 *
 * 首先看看昨天直播的图,复习一下。
 */
public class Demo {
   
    static {
   
        //这叫静态代码块,这是最先被执行的
        /**
         * 类在jvm里加载分为几个阶段呢?
         */
        System.out.println("静态代码块");
    }
    {
   
        System.out.println("普通代码块");
    }
    public Demo() {
   
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
   
        System.out.println("main");
        new Demo();

    }
}

先看看上节课的知识点的图,这里先稍微回忆一下。
javacore1_第2张图片

小程序咋执行的呢?

javacore1_第3张图片

demo.java 编译成demo.class ,然后加载到虚拟机,会经历图中(类加载器)一系列的步骤。
其中准备阶段里有几个概念,什么叫初始值,什么叫变量值,什么是类成员(static修饰的啊)。 后面会讲

初始化之后就是使用了, 使用的步骤如图中黑体字。其中第一步1.加载实例信息到内存中,普通代码块就是实例信息,看到了吗,普通代码块就是在这时候执行的。 然后第二步2.执行构造方法。 所以执行顺序就是这么来的。

2.3、再看个小程序

class Father{
   
    static {
   
        System.out.println("Father静态代码块");
    }
    {
   
        System.out.println("Father普通代码块");
    }
    public Father() {
   
        System.out.println("Father构造方法");
    }
}

class Son extends Father{
   
    static {
   
        System.out.println("Son静态代码块");
    }
    {
   
        System.out.println("Son普通代码块");
    }
    public Son() {
   
        System.out.println("Son构造方法");
    }
}

public class Demo {
   
    public static void main(String[]

你可能感兴趣的:(java,javaweb,jvm)