java编译成class,jvm启动时通过classloader对于需要的进行加载,加载过程先加载类的父类,加载完初始化静态字段,静态构造块。classloader有好几个,如果上层已经有了直接用,没有则去上层寻找,原始的class基本都是rt.jar里面的。
这个问题可以描述的比较简单,也可以说的很详细,可以参考这篇: https://www.cnblogs.com/developer-ios/p/5550789.html 简单来说,java文件会被编译成class文件,之后通过双亲委派机制去加载class文件,当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类,这样可以防止相同的class重复加载,相同的class通过不同的类加载器加载起来equals是false的
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。