119-类加载和对象创建练习-【视频讲解】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012725164/article/details/89466323

1.1.1. 类加载顺序:

JVM要使用一个类,就会去内存中方法区找这个类;如果找到了,就直接使用;如果找不到,就去加载类;

1、JVM第一次要使用一个类的时候,去硬盘上找这个类的class文件;

2、JVM找到这个类的class文件后,加载到内存中的方法区;其中,非静态成员变量、构造函数和非静态一般函数都放到非静态区域;静态成员变量、静态函数都放到静态区域;

3、在方法区的静态区域,为类中的静态成员变量分配空间,赋默认值;

4、按照代码书写的顺序,从上往下,给静态成员变量赋值,同时执行静态代码块;

5、类加载完成;

3、4两步,属于类的初始化阶段;

1.1.2. 对象创建过程:

1、JVM执行时遇到new关键字,到堆内存中开辟对象空间;

2、在对象空间中,为类中的非静态成员变量赋默认值;

3、根据new关键字后面的代码,调用相应构造函数进栈执行;

(1) 构造函数进栈后,首先调用父类构造函数执行;

(2) 父类构造函数执行完毕出栈后,开始根据代码书写的顺序,从上往下,给对象空间中的变量赋值,同时执行构造代码块;

(3) 执行构造函数中书写的代码;

4、构造函数执行结束出栈,对象创建完成;

1.1.1. 练习

1、下面的代码编译运行有没有错误?如果没有,运行结果是什么?说明原因。

点击查看视频讲解

1

2

3

4

5

6

7

8

9

public class CodeTest {

    CodeTest(){

    System.out.println("我是构造函数");

    }

    static CodeTest ct = new CodeTest();

    public static void main(String[] args) {

    new CodeTest();

    }

}

2、下面的代码编译运行有没有错误?如果没有,运行结果是什么?说明原因。

1

2

3

4

5

6

7

8

public class CodeTest {

    CodeTest(){

    System.out.println("我是构造函数");

    }

    CodeTest ct = new CodeTest();

    public static void main(String[] args) {

    new CodeTest();

}

猜你喜欢

转载自blog.csdn.net/u012725164/article/details/89466323