类加载机制

前言: 

- 什么是使用到类:1、创建该类的对象算是使用,2、然后调用这个类的静态方法也算是使用
- 包名加类名:这叫做类的权限定名
- 输入流Input stream:把硬盘中的class文件读取到内存中
- .class 这些都是一个一个的文件,它会把硬盘里面的静态数据,读取到内存里面来了,就相当于是动态数据了,因为进盘里面的数据是不是万年不变的,也叫做数据持久化,存到的硬盘里面的数据是不能改变的,那么我们要改变得要读取到内存里面。
- Java 的世界里面万物皆对象:对象是属于是某一个类的。Person类的class文件对象,String的class文件对象,Test类的class文件对象,它们都属于 Class 这个类,是Class 类的对象。
 

类加载机制

1、首先要把这个硬盘里面的 test .class 加载到方法区。这是JVM干的事情。

2、test .class加载完了以后,JVM就会在堆里面去创建test 类的 class 对象,JVM能够通过这 class 对象就能找到这个 test .class 文件。

3、接下来要去运行这个 test .class 类里面的 main 方法, main 方法的代码在这个 class 文件里面。JVM在内存外面,JVM去找到这个 class 对象,说你给我去找一下那个主方法,然后这个对象去找 class 文件,在 class 文件这里面找到这个主方法。找到主方法了以后,把机器指令发给JVM,JVM就去执行了。把方法的命令交给了JVM,JVM在栈内开辟空间。——main 方法,是JVM调用的。

4、接下来 new person(...),这是 new 一个 person 对象,但是 person 在内存里面没有,直接包名加类名去找person,在硬盘找到 person 以后,通过输入流到把这个person.class文件读取方法区里面。

5、读取到方法区里面以后,就会在堆里面去开辟空间,就是 person 类的 class 对象,这 person 类的 class 对象就能找到这个 person  .class 文件。

6、创建完了对象以后 ,JVM 就找这个对象,通过这 person 类的 class 对象找到这个 person  .class 文件,看这个 person 类里面有没有静态属性,找到静态属性后放到常量池。找到“地球”,最开始地球是用“*……¥#”这种符号来去代替的。

7、之后在静态区,这里面就有一个 person 类,然后里面有一个静态的String star =*……¥#,这叫做符号引用。0X11、 0X 22 这个是地址,它叫做直接引用,地址引用。

8、接下来把符号引用替换,就不要符号了,它是随便给的一个符号,然后再给常量池的地球 0 x11,最后再给静态区的地球 0 x11。

9、这个类就加载完了。类加载过程完了以后,这时候才 开始new 对象。这时候JVM又通过这 person 类的 class 对象找到这个 person  .class 文件。比如要使用有参构造创建对象,通过这 person 类的 class 对象找到这个 person .class 文件,JVM 是不能直接找到这个 class 文件的,必须通过对象去找。找了以后你就 new 一个 person 对象,有地址0x001,person 对象里面有三个属性,name,sex,age,给这三个属性赋系统默认值。

...(后面就跟之前讲的一样)
 

 

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值