虚拟机(JVM)究竟何时读入类?
偶有个程序,在启动后要在程序中修改一个类文件(.class)
那么,JVM究竟运行哪个类?
------解决方案--------------------JVM你可以看成一个大容器,你所要编译的程序都在工程里,工程又在这个大容器里(当然,区分你的是什么样的工程,不同种类的工程加载也不完全一样),JVM根据整个工程的配置可能的加载也不同,比如WEB中的工程,就根据你的注入时机确定何时加载(DI),如果是javaAplication,一般是启动JVM的时候,从主线程加载整个工程...
------解决方案--------------------不是很明白LZ的意思哦~
为什么不把那个类提供外部接口来修改它呢?
------解决方案--------------------类是在第一次被引用的时候载入的。
如果一个类在JVM运行时一次都没有引用过,那到JVM结束运行时,还是没有载入。
类是被引用它的那个类的ClassLoader作为一个对象载入的(实际载入的是Class类的一个实例)。例如:
class A {
static {
B.staticMethod();
}
}
那么在A被别的类引用的时候,它引用的B类也会载入内存——因为A类初始化的时候,引用到了B类。
而如果是下面这个样子:
class A {
public void run() {
B.staticMethod();
}
}
那么直到A的方法run在某个地方调用的时候,B类才会载入内存。