ClassLoader的动态加载机制。
一、原则:
1、Java中的ClassLoader并非一次加载,而是在需要的时候才会加载。
2、static语句块在加载后只会执行一次。
3、dynamic语句块每次new新的对象都会执行。
* 执行在static语句块之后,构造函数之前
* 等同于构造方法中的语句
* 用的较少
4、java -verbose:class参数可以观察类的具体加载过程。
二、下面我们首先来看一段代码。
package initialization;
/**
* 请使用-verbose:class参数查看加载顺序
*/
class A{
public A(int i){
System.out.println("A("+i+")");
}
}
class C{
static A a1 = new A(1);
public C(){
System.out.println("C()");
}
static{
System.out.println("类C的static块");
}
{
System.out.println("类C的动态语句块--此方法会无条件的加在每个构造函数之前");
}
}
class D{
public D(){
System.out.println("D()的构造函数");
}
}
public class TestDynanicLoadingV2 {
public static void main(String[] args){
System.out.println("main()--begin");
new A(2);
System.out.println("main()--middle");
new C();
new D();
}
}
三、可以在eclipse中,右键该文件,使用Run As-->Open Run Dialog,然后在Arguments标签页中的VM arguments中输入“-verbose:class”参数来执行该类,结果如下:
[Loaded initialization.TestDynanicLoadingV2 from file:/D:/workspace/java/TestReflection/bin/]
main()--begin
[Loaded initialization.A from file:/D:/workspace/java/TestReflection/bin/]
A(2)
main()--middle
[Loaded initialization.C from file:/D:/workspace/java/TestReflection/bin/]
A(1)
类C的static块
类C的动态语句块--此方法会无条件的加在每个构造函数之前
C()
[Loaded initialization.D from file:/D:/workspace/java/TestReflection/bin/]
D()的构造函数
四、分析
从上面的代码运行结果可以看出,ClassLoader在加载类时,是一行一行的加载,只有在需要时,它才会把相关的类load到内存中来。
分享到:
相关推荐
2. **双亲委派模型**:Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它会先委托给父类加载器去加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。这种设计有助于防止...
双亲委派模型使得系统类(如java.*开头的类)由Bootstrap ClassLoader加载,而用户自定义类由应用程序类加载器(AppClassLoader)加载。这避免了类的冲突,保持了系统类库的稳定性。但有时我们可能需要打破这种模型...
通过分析这些源代码,我们可以更深入地理解如何实现ClassLoader的动态加载机制。 总结来说,Android的ClassLoader动态加载dex是一种高级技巧,它可以让我们在不更新整个APK的情况下实现功能更新。这涉及到对Android...
它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 ...
ClassLoader的基本职责是根据类名动态加载对应的类文件。在Java中,类加载过程遵循双亲委派模型(Parent Delegation Model)。这意味着当一个ClassLoader尝试加载某个类时,它首先会将任务委托给其父ClassLoader。...
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
在Android系统中,动态加载机制是一种关键的技术,它允许应用程序在运行时加载或者卸载代码模块,极大地提高了软件的灵活性和可扩展性。这一技术在实现插件化开发中尤为重要,因为它能让应用在不更新主程序的情况下...
Java的类加载机制是其运行的核心部分,它涉及到如何将`.class`文件转换为内存中的类实例。在Java中,`ClassLoader`是负责这个过程的关键组件。本文将深入探讨ClassLoader的工作原理,Java类的结构,以及Java类的动态...
3. 实现类的动态实例化:通过自定义ClassLoader加载的类,可以使用Class.forName()方法获取其Class对象,然后通过newInstance()创建实例。 四、测试与实践 在提供的压缩包中,load.jar和test.jar可能是包含待动态...
Java的ClassLoader类加载器机制 在 Java 虚拟机(JVM)中,类加载器(ClassLoader)扮演着非常重要的角色。类加载器负责加载 Java 类,包括核心类和用户自定义类。在 JVM 运行过程中,类加载器会形成一个层次结构,...
《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到...
该电子书详细介绍了java虚拟机类加载机制,对于深入理解jvm工作原理有很好的帮助作用,对于初学java,有一定工作经验的小伙伴来说是一本提高自身java素养,夯实自己java基本技能的“葵花宝典”。
Android Classloader动态加载分析 Android Classloader动态加载分析是Android应用程序中一个非常重要的知识点。ClassLoader是Java虚拟机(JVM)中的一种机制,负责加载Java类文件到内存中,并将其转换为java.lang....
在安卓开发中,动态加载机制是一项关键的技术,它允许应用程序在运行时加载和卸载代码模块,提高了软件的灵活性和可扩展性。本资源提供的"Android中的动态加载机制(折腾版) 源码.zip"包含了一些实现动态加载的示例...
在Java编程语言中,类加载机制(ClassLoader)是理解JVM(Java Virtual Machine)工作原理的关键部分。它负责将.class文件从磁盘加载到内存中,使得Java程序能够执行。这个过程包括加载、验证、准备、解析和初始化五...
了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对ClassLoader API的使用和自定义的详细说明。 首先,我们来看ClassLoader的基本概念。在Java中,...
最后,App ClassLoader加载的是应用类路径(ClassPath)中的类。 ClassLoader的工作流程主要包含以下步骤: 1. **查找类**:当JVM需要加载一个类时,ClassLoader会根据类名(全限定名,如`java.lang.String`)在...
例如,Bootstrap ClassLoader加载的核心类库不会被其他类加载器重新加载。 #### 五、自定义类加载器 虽然Java提供了默认的类加载器,但在某些情况下可能需要自定义类加载器来满足特定的需求,如实现热部署、动态...
总结来说,Java ClassLoader机制是Java平台的基础,它使得程序能够动态地加载和管理类。而在OSGi这样的模块化环境中,ClassLoader机制得到了进一步的发展,实现了更加精细的类加载控制和更好的模块隔离。理解并掌握...