关于Java中类的加载的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/20 03:27:32
我们知道,当创建一个类的对象时(new 类名)和执行某类的静态方法时(类名.方法名),该类的.class文件会被加载到一段内存中 请问 在这之后是不是.class文件一直会存在于内存中? 那下次再次执行new className()时,还会不会重复加载呢?

谢谢 :)
请注意 我想问的是.class文件会不会在下次再次执行new className()时被再次加载?

当创建一个类的对象时(new 类名)和执行某类的静态方法时(类名.方法名),该类的.class文件会被加载到一段内存中

这句话倒是没错,但当创建一个类的对象时(new)
1.先将该类的.class文件会被加载到一段内存,初始化static属性和方法,为他们分配空间,以后一直在内存中(这就是不建议使用static属性和方法的原因之一)
2.copy其中非static属性和方法,为他们初始化,分配空间,然后才可以使用,因为非static的属性和方法是跟随对象的,所以当对象被回收时,属于该对象的属性和方法也被回收,再new的时候再生成。

static还有一点不好的就是所有对象共用,这样可能导致数据的不安全性(比如我在用的时候,你突然给改变了,我再用的时候值可能就不连续了)
所以建议使用非static

本人前段时间学习了几个月的虚拟机 时间一过 就忘记得差不多了
虚拟机的运行原理其实是一个很复杂的过程的
一个java虚拟机实例的行为是分别按照子系统,内存区,数据类型以及指令这几个术语来描述的

在这里面又要细分出很多东西出来 所以看得我是晕头转向的 所以大家有什么不懂可以来探讨

问题的答案一楼已经回答地很详细了