`

动态装载以及对反射机制的理解

阅读更多

                                             动态装载以及对反射机制的理解
       一、在最开始学习编程的时候,写的代码可以说是都是硬编码,而且是最简单的那种函数(方法)的实现也是硬

编码,比如把一个函数里面的参数都自己指定了大小,不懂得使用传入参数来动态改变数组长度啊,这样一些一

经过定义就确定的东西,这样的代码就是最初始学习编程的时候写过的最硬的硬编码了。后来学会了使用参数啊

、方法返回值啊之类的来动态规定接下去的程序的执行顺序,以此来避免代码变死编码的问题。就这样沾沾自喜

了接近一年后,今天才知道了代码还可以使用一种叫做动态装载的技术来实现程序运行时的动态装载,说成装载

,我更倾向于说成修改,因为它的目的无非就是实现在程序运行不中断的前提下修改程序,只是区别于硬编码的

是:硬编码要修改就得停止运行程序,修改完之后还得重新编译并运行程序;而动态的代码则是在运行过程中实

现修改目的,而不用停止程序重新编译。这样的话,如果一个程序系统很大很大的时候,就不用浪费时间在重新

运行上,而且能实现运行中更新程序的目的,也避免了用户数据和时间的错乱和浪费,这无疑是理想的。
      多说无益,还是用代码来解释比较清晰。

 

package Dclass;
//学习接口
public interface learn {

	void study();
	
}

package Dclass;
//学生类实现学习接口
public class Student implements learn{
	
	public void study() {
		System.out.println("我是一个学生,在学习中。。。");
		
	}
}

package Dclass;
public class test {
	//主函数
	public static void main(String[] args) throws ClassNotFoundException, Exception, 

IllegalAccessException {

		// 硬编码
		Student student = new Student();
		student.study();

		// 动态装载编码
		String s = "Dclass.Student";
		Class c = Class.forName(s);//必须传入一个字符串,不能直接传入结构名字或类名字
		Object obj = c.newInstance();
		learn Dstudent = (learn)obj;
		Dstudent.study();
	}
}

 

      上面的代码定义了一个learn的接口,里面有一个study方法,Student类实现了learn接口,并分别展示了静

态绑定和动态装载两种机制来实现对象的创建,两者的区别就在于静态绑定的机制必须在Student类已经存在并

编译通过才能开始程序,而动态装载机制则只需要类名字来装载类对象,适当设计的程序可以实现在原来程序运

行过程中动态添加需要的类后加载到程序中运行,比如使用循环来获得用户输入的类名字,再确定加载哪一个类

对象,这样就不必停止程序而去修改并重新编译所有代码了。

       二、而对于反射机制的解释无非就两个字而已,就是回溯。打个比方,我们以前写代码的时候思路都是从上到下

的,就像一棵树,从根节点到叶子节点,一层一层往下找。而放射机制就是提供了一些技术让我们可以从叶子节

点往上找到根节点。以前是用类对象可以拿到其中的一个具体实例的属性方法之类的,也就是对象里面的所有东

西,反射就是允许你拿到一个类的实例的时候能够获取其往上的东西,比如说它的类中的方法啊,属性等信息。

简单地说就像链表一样,我们以前只想着链表是单向的,现在反射机制就是提供了链表的另一个方向的路径,使

它变成了双向链表了,至于变成双向的链表之后,它有什么新应用想必大家都有自己的奇思妙想的。

分享到:
评论

相关推荐

    Java类文件动态装载

    动态装载机制在开发工具中也得到了广泛应用,如IDEA、Eclipse等集成开发环境的插件系统,以及Junit测试框架中的动态测试类加载。 综上所述,Java类文件的动态装载机制是Java平台灵活性和可扩展性的基石。理解并...

    spring IOC反射装载bean

    这个Demo有助于理解Spring如何通过反射机制加载和管理Bean,以及如何通过XML配置实现依赖注入。 总的来说,"spring IOC反射装载bean"是Spring框架的基础,它使得开发者可以专注于业务逻辑,而不必关心对象的创建和...

    一个基于.NET的在运行时动态装载组件assembly 并调用内部方法的程序源码例子

    在.NET框架中,动态装载组件或插件是应用程序设计中的一个重要方面,它允许程序在运行时根据需要加载和执行特定的代码模块...不过,这也需要开发者对.NET的反射机制有深入的理解,以确保正确地处理各种异常和边界情况。

    JAVA新特性--java反射、映射

    可以说,实现了反射机制的系统都具有开放性,但具有开放性的系统并不一定采用了反射机制,开放性是反射系统的必要条件。一般来说,反射系统除了满足开放性条件外还必须满足原因连接(Causally-connected)。所谓原因...

    Java虚拟机类装载:原理、实现与应用

    另一个例子是Java的反射API,它利用类装载机制在运行时动态访问和操作类的属性和方法。 总的来说,理解Java虚拟机的类装载机制对于深入掌握Java应用程序的运行机制至关重要。通过自定义ClassLoader,开发者可以实现...

    大学课程讲义-Java基础-反射.pptx

    本文将详细介绍Java基础中的反射机制,包括Class类、ClassLoader类、Constructor、Method、Field类的用法,以及动态代理机制。 Class类 Class类是Java中一个特殊的类,用于描述类本身的信息。每个类在JVM中都有一...

    利用类装载器动态加载类并启动类

    此方法不仅加深了我们对于Java类装载机制的理解,同时也提供了一种实用的数据保护手段。 #### 位移加密算法 位移加密算法是一种简单但有效的加密方式,主要通过改变字节的二进制位位置来实现加密和解密功能。 ####...

    java概述课件24反射.ppt

    Java反射是Java编程语言中的一个重要特性,允许程序在运行时检查和操作类、接口、对象的内部信息。在“java概述课件24反射.ppt”中,主要讲解了Java中...理解并掌握反射机制对于深入学习Java和开发高级应用至关重要。

    java之jvm学习笔记五(实践写自己的类装载器)

    通过实践编写自己的类装载器,不仅可以加深对JVM内部工作原理的理解,还能锻炼对Java反射、字节码操作、类加载机制的掌握。这是一个提升Java技术水平的重要步骤,也是成为一名资深Java开发者必备的技能之一。

    Java类装载过程_.docx

    Java 类装载过程是Java虚拟机(JVM)运行的核心机制之一,主要涉及到类从加载到初始化的完整生命周期。这一过程确保了程序的正确运行,并在安全性方面起到关键作用。以下是详细的解释: 1)装载(Loading): 在这...

    深入理解Java虚拟机(第二版)_java_

    《深入理解Java虚拟机(第二版)》还详细讨论了JVM的其他重要主题,如异常处理、反射、类加载器自定义、线程与同步、JVM调优工具的使用等。通过阅读本书,读者不仅可以深化对Java技术的理解,还能提升解决问题的能力...

    JAVA深度历险

    理解类装载器的工作原理对于优化程序性能、实现自定义装载逻辑以及深入理解JVM运行机制至关重要。 首先,我们要知道Java的类装载器分为 Bootstrap ClassLoader(引导类装载器)、Extension ClassLoader(扩展类装载...

    关于java虚拟机规范

    8. **动态性与反射**:Java允许在运行时检查和修改类,这依赖于JVM的反射机制。理解反射如何工作,可以让你更好地利用Java的动态性。 9. **模块系统**:Java 9引入了模块系统,这改变了类的加载和访问方式,有助于...

    java 类加载机制和反射详解及实例代码

    Java 类加载机制是Java运行时环境的一个核心特性,它...理解类加载机制和反射对于优化性能、实现动态加载、增强代码灵活性等具有重要意义。开发者应谨慎使用反射,因为它可能导致安全风险、性能损失和难以调试的问题。

    类加载器与反射.pptx

    此外,Java反射机制允许程序在运行时动态地获取类的信息并操作类的对象。通过`java.lang.reflect`包提供的API,可以获取类的私有字段、调用私有方法,实现灵活的代码控制。 例如,`Class`类的`forName()`方法可以...

    310-035 Sun Certified Programmer for Java 2 Platform

    8. **反射机制**:理解Class类的使用,动态加载类,以及通过反射调用方法和访问属性。 9. **异常处理**:了解异常的分类,何时抛出异常,如何自定义异常,以及如何编写健壮的异常处理代码。 10. **JVM与类装载器**...

Global site tag (gtag.js) - Google Analytics