一、相关含义
1.静态变量
static int num = 4;
2.静态块
static { // 3.加载静态块
System.out.println("这个是静态块");
}
3.静态方法
static void method() // 静态方法,调用的时候才加载
{
System.out.println("这个是静态方法!");
}
4.实例变量
int a = 5;
5.实例块
{
System.out.println("这个是实例块2" + "---实例值变量a:" + a);
a=4;
}
6.实例方法
void print() {
System.out.println("这个是实例方法!");
}
二、执行流程:
- 类还没有被加载情况:(含有继承情况,若无则忽略以下父类,只看子类即可):
1、先执行父类的静态代码块和静态变量初始化,且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关
2、执行子类的静态代码块和静态变量初始化
3、执行父类的实例态代码块和实例变量初始化 ,执行顺序只跟代码中出现的顺序有关
4、执行父类的构造函数
5、执行子类的实例态代码块和实例变量初始化 ,执行顺序只跟代码中出现的顺序有关
6、执行子类的构造函数
- 类已经被加载情况:
静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法,调用想要执行方法就执行该方法
- 代码执行演示:
public class Test { //1.加载Test类
public static void main(String[] args) {
System.out.println("静态变量值:" + Test.num);
Test t = new Test(); //4.new一个类
System.out.println("实例变量值a:" + t.a);
System.out.println("静态变量值:" + Test.num);
Test.method(); //static方法不同于static块,不会自动执行的,只有你在代码中显示的调用,即类名.静态方法名();才会执行
t.print(); //同样调用才会执行
}
{
num += 3; // 在实例块中改变静态变量值,可以验证实例块在静态之后
System.out.println("这个实例块1"); //5.实例块和实例变量由编写先后决定
a = 3;
}
int a = 5; //6.,按照顺序加载变量,验证时可以调换实例变量与实例块位置,然后在main函数中输出
{ // 成员变量第三个
System.out.println("这个是实例块2" + "---实例值变量a:" + a); //7.执行第二个的代码块
a=4;
}
Test() { // 类的构造函数,第四个加载
System.out.println("这个是构造函数"); //8.最后加载构造函数,完成对象的建立
}
static int num = 4; //2.静态变量和静态代码块的加载顺序由编写先后决定
static { // 3.加载静态块
System.out.println("这个是静态块");
}
static void method() // 静态方法,调用的时候才加载
{
System.out.println("这个是静态方法!");
}
void print() {
System.out.println("这个是实例方法!");
}
}
参考:https://www.cnblogs.com/leiqiannian/p/7922824.html