类加载学习
隐式动态性
也就是说当自己的程序用到NEW关键字时,就会载入需要载入的类....
显示的动态性
1. 一个是由java.lang.Class 的forName()方法
2.是由java.lang.ClassLoader 的loadClass()方法
写例子让自己理解下;
interface Assembly{
public void start();
}
public class Main{
public static void main (String[] args) throws Exception{
Class c=Class.forName(args[0]);
Object o=c.newInstance();
Assembly a=(Assembly) o;
a.start();
}
}
class A implements Assembly{
public void start(){
System.out.println("class a 使用");
}
}
class B implements Assembly{
public void start(){
System.out.println("class b 使用");
}
}
class C implements Assembly{
public void start(){
System.out.println("class c 使用");
}
}
动态载入,用到哪个类的时候就载入哪个类.
执行 java -verbose:class Main
[Loaded Main from file:/C:/wang/]
[Loaded java.lang.IndexOutOfBoundsException from shared objects file]
[Loaded java.lang.ArrayIndexOutOfBoundsException from shared objects file]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.main(Main.java:6)
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]
抛出异常了,界限异常.. 没有输入命令行参数......
接着 java -verbose:class Main A
[Loaded java.security.cert.Certificate from shared objects file]
[Loaded Main from file:/C:/wang/]
[Loaded Assembly from file:/C:/wang/]
[Loaded A from file:/C:/wang/]
class a 使用
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]
先载入主类.. 接口...
载入A类,即可以在不修改主类的情况下增加新的功能..(我没把类分开写.....)
如果写个类D继承了类A ... 会如何..
class D extends A implements Assembly{
public void start(){
System.out.println("class d extends a implements assembly 使用して");
}
}
接着: java -verbose:class Main D
[Loaded Main from file:/C:/wang/]
[Loaded Assembly from file:/C:/wang/]
[Loaded A from file:/C:/wang/]
[Loaded D from file:/C:/wang/]
class d extends a implements assembly 使用して
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]
哦. 是先载入了父类的文件,再载入了子类.....
如果D->C->B->A 依此继承....
[Loaded Main from file:/C:/wang/]
[Loaded Assembly from file:/C:/wang/]
[Loaded A from file:/C:/wang/]
[Loaded B from file:/C:/wang/]
[Loaded C from file:/C:/wang/]
[Loaded D from file:/C:/wang/]
class d extends a implements assembly 使用して
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]
就按循序载入....
分享到:
相关推荐
在Java编程语言中,动态类加载机制是一种强大的特性,它允许程序在运行时加载、实例化和执行未在编译时硬编码的类。这种能力是通过Java的反射API实现的,它为开发者提供了深入洞察和操作Java对象的能力。本文将深入...
"bin"后缀表示这是可执行的二进制文件,通常包含Java类文件和其他资源,可以被Java虚拟机直接加载和运行。 JDBC是Java标准API的一部分,提供了统一的方式来访问各种类型的数据库。MySQL Connector/J是MySQL官方提供...
下面我们将深入探讨Java动态加载jar文件的原理和实践方法。 首先,我们需要理解Java的类加载机制。Java中的类是由类加载器(ClassLoader)负责加载的。默认情况下,Java虚拟机(JVM)提供了三个内置的类加载器:...
综上所述,"springboot+java类热加载"是一个涉及SpringBoot框架、Java类加载机制、动态编译以及依赖管理的综合技术话题。通过理解这些概念和相关工具,开发者可以更高效地进行迭代开发,提高生产力。在实际应用中,...
在Java编程中,类动态加载是一项重要的技术,它允许程序在运行时根据需要加载新的类,从而提高了灵活性和可扩展性。这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时...
在使用Java Property Utils时,开发者可能通过这个库动态加载或更新CORS配置,使得跨域策略更具灵活性和动态性。例如,他们可能需要根据不同的环境(开发、测试、生产)设置不同的跨域策略。 `java-property-utils-...
4. 动态性:可以在运行时添加或移除类路径,支持热部署。 类加载的委托模型在Tomcat中也得到了体现。每个类加载器在尝试加载类时,会先委托给父类加载器,只有当父类加载器无法加载时,才会尝试自己加载。这种机制...
在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...
### JAVA类加载机制与动态代理 #### 一、类加载机制 ##### 1.1 类加载的时机 类加载机制负责将描述类的数据从`.class`文件加载到内存,并进行必要的校验、转换解析和初始化,使之成为可以被Java虚拟机直接使用的...
它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类加载器的工作原理 Java类加载器遵循按需加载原则,即只有当应用程序真正需要使用某个类时,类加载器才会去加载它。这一...
Java 类加载器原理 Java 类加载器是Java虚拟机...类加载器的机制保证了Java的类加载过程是有序且安全的,同时也支持了Java的动态加载和模块化特性。在自定义类加载器时,需要遵循这些规则,以便正确地扩展JVM的功能。
总结来说,Java动态加载JAR或ZIP包是通过自定义类加载器实现的,它可以让我们在运行时按需加载外部库,提高系统的可扩展性和灵活性。这个过程涉及到类加载器的创建、文件的读取、类的解析和实例化等多个步骤,是一项...
总之,Java动态加载jar包涉及到反射、自定义类加载器以及插件系统等多个核心概念。通过这些技术,开发者可以构建出高度可扩展和灵活的应用程序,适应不断变化的需求。在具体实现过程中,还需要考虑安全性、性能优化...
### Linux 下 Java 开发环境搭建及 C++ 动态库加载方法详解 #### 一、Linux 下 Java 开发背景 Java 作为一种广泛使用的编程语言,其设计初衷是实现一次编写,到处运行的目标,即跨平台特性。这使得 Java 程序能够...
它不仅关乎程序的启动与运行,更是Java动态性与灵活性的基础。本文旨在深入探讨Java类加载的过程、原理及其在实际开发中的应用。 #### 二、类与数据的概念 在Java中,一个类定义了对象的行为与状态。类定义了可...
### Java反射机制与动态加载实例类 在Java中,反射是一种强大的工具,允许程序在运行时检查和修改其结构和行为。通过反射,我们可以动态地加载类、创建对象、访问和修改字段、调用方法等。本文将深入探讨Java反射...
以上就是关于动态编译和加载Java类的一些核心知识点,这些技术大大提升了Java应用的灵活性和适应性,但同时也需要开发者对Java的类加载机制、安全性和性能有深入理解,才能有效地运用到实际项目中。
总结来说,Java应用程序类加载器是Java程序执行的关键部分,它负责在运行时找到并加载类,而它的灵活性和可配置性为开发者提供了强大的能力来适应各种复杂的应用场景。理解并掌握类加载器的工作原理,能帮助我们更好...
总之,Java的类加载器是理解JVM工作原理的关键一环,其背后涉及到了许多高级特性,如设计模式、动态加载、模块化以及安全性。通过对这些知识点的深入学习,开发者可以更好地控制和优化应用程序的行为。
虽然Java提供了默认的类加载器,但在某些情况下可能需要自定义类加载器来满足特定的需求,如实现热部署、动态代理等功能。自定义类加载器需要继承`java.lang.ClassLoader`类,并重写`findClass`方法来实现自定义加载...