江门公司网站建设,2013一汽大众企业网站车主俱乐部建设维护方案,微网站栏目,网站怎么快速做收录文章目录 1、什么时候一个类会被加载#xff1f;1、包含 main 方法的主类2、非 包含 main 方法的主类#xff0c;什么时候去加载#xff1f; 3、类加载器如何加载一个类#xff1f;1、验证阶段#xff1a;2、准备阶段#xff1a;3、解析阶段#xff1a;4、初始化#x… 文章目录 1、什么时候一个类会被加载1、包含 main 方法的主类2、非 包含 main 方法的主类什么时候去加载 3、类加载器如何加载一个类1、验证阶段2、准备阶段3、解析阶段4、初始化 4、父类什么时候加载和初始化4、双亲委派机制1、类加载器类型2、双亲委派机制原理 1、什么时候一个类会被加载 1、包含 main 方法的主类
public class Kafka{public static void main(String[] args){}
}答案包含 main 方法的主类 会在JVM 进程启动之后将 main 方法所在的主类加载到内存里。然后从 main 方法的入口代码开始。 2、非 包含 main 方法的主类什么时候去加载
public class KafkaManager{}public class Kafka{public static void main(String[] args){KafkaManager kafkaManager new KafkaManager(); }
}答案当你需要使用到某个类KafkaManager.class去实例化一个对象的时候类加载器会把 “KafkaManager.class” 字节码文件中的这个类加载到内存中。 3、类加载器如何加载一个类 1、验证阶段
答案根据java虚拟机规范校验你加载进来的 “.class”文件中的内容是否符合规范。
2、准备阶段
答案加载一个类到内存里首先需要给这个 “ReplicaManager”类分配一定的内存空间然后给他里面的类变量也就是 static 修饰的变量分配内存空间来一个默认的初始值。
3、解析阶段
答案将符号引用 替换为 直接引用
4、初始化
答案执行真正的初始化代码逻辑static静态代码块中的内容也是在这里执行。
通过 “new ReplicaManager()”实例化类的对象的时候会触发类的加载到初始化的全过程然后实例化一个对象出来。
另外初始化一个类的时候如果发现他的父类还没有初始化那么必须先初始化他的父类。 4、父类什么时候加载和初始化
答案初始化一个类的时候发现他的父类还没初始化那么必须先初始化他的父类
public class KafkaManager extends AbstractDataManager{public static int flushInterval Configuration.getInt(replicate.flush.interval);public static MapInteger, Replica replies;static{loadReplicaFromDisk();}public static void loadReplicaFromDisk(){this.replies new HashMap();}
}
如果你要 “new ReplicaManager()” 初始化这个类的实例那么就会加载这个类然后初始化这个类但是初始化这个类之前发现 AbstractDataManager 还没有加载和初始化就需要先加载这个父类并且初始化这个父类。 4、双亲委派机制 1、类加载器类型 1、启动类加载器Bootstrap ClassLoader, 负责加载机器上安装java目录下的核心类java安装目录下有一个lib目录里面就是java最核心的一些类库
2、扩展类加载器Extension ClassLoader, 负责加载java安装目录下的 “lib\ext”目录下的一些类
3、应用类加载器Application ClassLoader, 负责加载“classPath”环境变量锁指定路径中的类大概就是加载你写好的java代码。
4、自定义类加载器根据你自己的需求加载你的类 2、双亲委派机制原理
假设你的应用程序需要去加载一个类他首先会委派给自己的父类加载器去加载经过层层床底最终传递到顶层的类加载器去加载。
但是如果父类加载器在自己负责范围加载的范围内没有找到这个类就会将加载的权利给自己的子类加载器去进行加载。
简单一点先去找父类去加载父类加载不到就交给儿子来加载这样可以避免多层级的加载器结构重复加载某些类。