用Class类进行动态加载
今天我学习了Class类,并且用于程序的动态加载,这让我的Java技术有了更深的进步。因为以前写的程序的类都是静态加载的,没有考虑以后的动态拓展,也就是说在不关闭程序的情况下进行动态的类更新加载,以拓展程序的功能。以前我对new 一个对象这样的实例化对象方法根深蒂固,现在才知道还有像Class.forName("类名").newInstance();这样的方法,真是一串好代码。下面我就来说说动态加载的步骤。
第一步:获得类的类类型
Class c=“类名”.class;这其实是一个类的对象,也就是说类也是一个对象,是Class类的对象,但准确的说c应该是类类型。或得类类型有三种方法
(1)Class c=“类名”.class;
(2)Class c=Class.forName("类名")
(3)Class c=“类名”.getClass();
第二步:为需要加载的类写一个父类
为什么要给要加载的类写一个父类呢?请看第三步
第三步:用类类型实例化需要加载的新类的对象
父类名 新对象=(父类名)c.newInstance();这样写的好处就是就是我们可以不关心需要加载一个什么类,只要把这个类继承父类就可以用于加载了,这就是为什么要写一个父类的原因。
下面来看一个我写的demo
public class Zoo { public static void main(String[] args) { while(true){ System.out.println("请输入要新加入动物园的类名:"); Scanner s=new Scanner(System.in); String classname=s.next(); if("OK".equals(classname)){ System.out.println("动物加入完毕"); break; } try { Class c=Class.forName(classname); Animal animal=(Animal)c.newInstance(); animal.speak(); } catch (Exception e) { e.printStackTrace(); } } } }
这个模拟动物园动物跟新,我们不知道要加入什么动物所以先写一个动物的父类,如下
//所有动物的父类 public class Animal { public void speak(){ System.out.println("====我是一种不具体动物===="); } }
下面假如程序已经跑起来了,我们此时要写了一个大象类,并要加入
//大象的类 public class Elephant extends Animal { public void speak(){ System.out.println("我是一只大象====很高兴加入动物园"); } }
这里我们输入大象的类名就可以了,注意要带包名com.demo.reflect.Elephant.同样的道理,想要加什么类就写好类的代码且继承Animal类,就可以随心所欲地加载了
相关推荐
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
因此,在实现动态加载时,需要对加载的类进行严格的权限控制和安全检查,防止恶意代码的注入。 6. **异常处理**:在处理类加载时,可能会遇到如ClassNotFoundException等异常,这时需要适当地捕获并处理这些异常,...
在Android开发中,动态加载Class是一项重要的技术,它允许应用程序在运行时加载未知或更新的类,从而提高软件的灵活性和可扩展性。这在处理插件化、热修复或者模块化开发时尤为常见。本篇文章将深入探讨如何在...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
使用`Class.forName()`加载类后,可以调用`newInstance()`方法创建类的实例,然后调用其方法执行动态编译的代码。 以上步骤概括了动态编译字符串成Java并加载到JVM的过程。这个技术虽然强大,但也需要注意安全问题...
NULL 博文链接:https://name327.iteye.com/blog/1554558
在网页开发中,我们常常希望在用户滚动页面时对某些元素进行特定的交互效果,例如动态添加class来触发CSS动画。`jQuery-scrollAddclass` 插件正是为此而设计,它允许开发者在元素进入浏览器视口时为其添加预设的...
1. `Class<?>`: 这是所有Java类的通用表示,通过`Class.forName()`方法可以动态加载指定的类。例如: ```java Class<?> clazz = Class.forName("com.example.YourClassName"); ``` 2. `Constructor<?>`: 代表类...
在Java编程中,动态编译代码并热加载类是一项重要的技术,它允许程序在运行时修改或添加新的类,而无需重启应用。这种能力对于快速迭代开发、调试和性能优化非常有用。本主题将深入探讨Java中的动态编译与热加载机制...
本文将详细介绍如何通过自定义类装载器来动态加载并启动类的过程,同时介绍一个简单的位移加密算法和非运算加密算法,以及如何使用这些算法进行文件的加密与解密。此方法不仅加深了我们对于Java类装载机制的理解,...
Class对象的创建发生在类加载(java.lang.ClassLoader)的时候,JVM加载一个类的时候首先创建Class对象,然后创建这个类的每个实例的时候都使用这个Class对象。 Class对象的作用是: 1. JAVA 使用 Class 对象来...
"Java中通过Class类获取Class对象的方法详解" ...* 动态加载类:通过Class类中的forName()方法可以动态加载类,实现动态加载类的功能。 * 依赖注入:通过Class对象可以获取类的信息,用于依赖注入机制。
这样,每次调用代理类中的方法,都会先检查实现类的class文件是否是最新的,如果不是则重新加载,达到动态加载实现类class的目的。 关键字: Java实现热加载; Java动态加载class; Java覆盖已加载的class; Java...
第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: ...
5. **初始化(Initialization)**:执行类构造器 `<clinit>` 方法,对类进行初始化操作。 #### 四、类加载器的具体工作原理 Java类加载器体系结构主要包括以下几种类型的加载器: 1. **启动类加载器(Bootstrap ...
在Java编程中,类动态加载是一项重要的特性,它允许程序在运行时加载未知或自定义的类。这个特性在某些场景下非常有用,如插件系统、热部署以及安全相关的利用。本文主要探讨了Java代码执行漏洞中类动态加载的应用,...
标签“Java 动态加载”不仅涵盖了上述的基础知识,还可能涉及更高级的话题,如类加载器的线程安全、双亲委派模型的打破以及如何处理类加载冲突等。在实际项目中,这些知识对于构建复杂、可扩展的应用程序是必不可少...
通过Class对象,我们可以动态加载类、创建对象、访问类的成员,实现运行时的灵活性和动态性。了解并熟练掌握Class类及其相关方法,对于理解和使用Java的高级特性,如动态代理、反射API等至关重要。
- **DCEVM (Dynamic Code Evolution VM)** 是一个修改过的JVM,允许动态地添加、删除和修改类,支持真正的热部署。 5. **实现步骤**: - 创建一个监听文件变化的机制,例如使用Java的`WatchService`或者第三方库...
4. **加载类**:对于每个类文件,使用自定义类加载器的`defineClass()`方法将其字节码转换为Class对象。这个过程涉及解码字节码、校验类信息,然后创建Class对象。 5. **反射调用方法**:一旦类被加载,我们可以...