Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

类的加载过程分为五个部分:(简写,后续补充)

加载、(验证、准备、解析)、初始化。

验证、准备、解析可以看作是链接过程。

加载

从文件加载到内存的过程。

验证

检查是否有不符合规范的代码,会不会出现安全问题

准备

为类变量分配内存(不是为实例,实例在初始化的时候才分配)。例如static变量(不会赋值,只给默认初始值)。

final static在该阶段就会赋代码值

解析

将符号引用直接转换为直接引用的过程。

初始化

实例化对象的过程,执行构造器。

静态数据加载过程

静态变量、代码块在类加载的时候就会调用,严格按照静态代码声明的顺序调用。

执行构造函数的时候,会先把其他属性初始化、初始化代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package javatest.pattern.staticload;

/**
* @description:
* @modifyContent:
* @author: Maple Chan
* @date: 2020-08-20 20:56:01
* @version: 0.0.1
*/
public class StaticTest {

public static void main(String[] args) {
System.out.println("100");
}
static StaticTest st = new StaticTest();

static {
System.out.println("1");
}

{
System.out.println("2");
}

StaticTest() {
System.out.println("3");
System.out.println("a=" + a + ",b=" + b);
}

public static void staticFunction() {
System.out.println("4");
}

int a = 110;
static int b = 112;
}

如果存在继承关系的时候,会先调用父类的静态代码块再执行子类的。

评论