本文主要是介绍java classloader,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
classloader 分为 四种, bootstrapclassloader extclassloader appclassloader 还有用户自定义的classloader ,bootstrapclassloader是用来加载最核心的class的,extclassloader和appclassloader也是在这时候被加载的。extclassloader是加载一些扩展类库的class的,appclassloader是用来加载用户的classpath里面的类的。用户自定义的classloader,这是用户编写的。
classloader会有parent 如果为空的话,那就认为parent是bootstrap。
加载一个类的时候,是从底层开始检查该类有没有被load进来,层层向上,当载入类的时候,是从上向下载入,每次都是检查父类有没有加载过要用的类,如果父类加载过了,那就不加载,如果父类没有加载,那就父类去加载,如果父类不能加载,那就自己加载。
这样的好处是,只有当底下需要用到类的时候才会去检查,而父类加载可以避免重复加载,并且可以防止子类加载了错误的类,将正确的覆盖了。
class文件包含的内容
- 结构信息。包括class文件格式版本号及各部分的数量与大小的信息
- 元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
- 方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息
这篇关于java classloader的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!