`
小篮子java的家
  • 浏览: 31132 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

动态装载与反射机制

阅读更多

动态装载

   程序运行的过程  

 

 二 classLoader类加载机制

            1 并非一次性加载 

            2 需要的时候加载即运行期间动态加载

            3 static语句块在加载后执行一次

            4 dynamic语句块每次new新的对象都会执行(等同与构造方法中的语句,少用)

  说明

       1,2点是说程序在加载类时,并不是一次性把所有用到的类都加载进去,而是运行到哪里就加载到哪里,是动态的。

  

 三JDKclassloader的分类

      classLoader具体来说有四个

           bootstrap classloader 负责核心类的加载

           extension classloader 负责扩展类的加载 

           application classloader  负责自定义类的加载 

           other classloader

  说明:

           bootstrap classloaderextension classloaderc或汇编语言或c++操作系统本地语言写的。其他的classloader是用java写的。所以其他的classloader也需要loader进来

 

  四JDKclassloader的层次关系

     如图:  
 

        classloader存在着层次关系,但不是继承。一个classloaderload class时会向上一层报告查看是否已经load,如果load了就不会再次load

 

 

 

 

反射机制

 

  什么是反射?

     反射机制就是我们可以通过反射的API接口可以探索运行期间的一个class的内部结构,并且根据他的内部结构来决定方法怎么样调用。

 

 反射机制的核心类

        类加载到内存中后就是一个个对象,其方法,属性等等也可以看作是一个对象。

       class       类的类型对象,即每个类都有这样的一个属性表示类型。例如:Object.getClass()就可以得到该类的对象,相当于类名.class

       constructor  代表类中的构造方法

       field       代表类中的成员变量

       method     代表类中的方法

       modifier    代表类中的修饰符

    这几个类就是我们实现反射机制的关键,首先我们要通过class.forName("XXX")得到加载到内存中XXXclass对象,然后再得到他的方法,成员变量来调用对象的方法。

 

 

实现反射的核心代码

 

package Reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Reflect {
	
	public Object invokeTest(String className,String fieldName,Object args){
		Object obj=null;
		try {
			//得到内存中的class对象
			Class<?> classObj=Class.forName(className);
			//将class对象示例出来
			obj=classObj.newInstance();
		     //得到指定的属性对象
			Field field=classObj.getDeclaredField(fieldName);
			//拼接处要调用的方法名称
			String methodName="set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
			//得到指定的方法对象
			Method method= classObj.getDeclaredMethod(methodName,field.getType());
			//调用该方法
			method.invoke(obj, args);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return obj;
	}
}

  

 

 

  • 大小: 12.6 KB
  • 大小: 3.6 KB
分享到:
评论

相关推荐

    java的反射机制及其实际应用

    反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。

    反射实例-JAVA反射机制

    Java中,反射是一种强大的工具。...反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内 部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。

    spring IOC反射装载bean

    spring基于xml配置加载bean 的demo 了解spring的反射机制

    JAVA中的反射机制(内含大量实例)

    JAVA中的反射机制(内含大量实例)Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到...

    JAVA中的反射机制

    Java中,反射是一种强大的工具。...反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。

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

    反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。

    IO,多线程,类的加载和反射

    IO(输入/输出)是所有程序都必需的部分:使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备...

    JAVA中级书籍

    反射机制;多线程;IO/NIO; 网络编程;常用数据结构和相关算法。 2、对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式;设计模式;单例模式;工厂模式;代理模式;模板方法模式;责任链模式等。 3...

    大厂真题之携程-Java高级

    在写程序的时候,我们几乎不需要关心类的加载,因为这些都 是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加 载所需要的类。 Java 类的加载是动态的,它并不会一次性将所有类全部加载后再运 行,而是...

    面试必问之jvm与性能优化

    在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。 Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证...

    Java开发技术大全(500个源代码).

    listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...

    疯狂JAVA讲义

    1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 ...

    大数据面试题.pdf

    4)对象与引⽤对象的区别 对象就是好没有初始化的对象,引⽤对象即使对这个对象进⾏了初始化,这个初始化可以使⾃⼰的直接new的也可以是直接其他的赋值的, 那么背new或者背其他赋值的我们叫做是引⽤对象,最⼤的...

    北斗卫星全球激光测距观测及数据应用

    北斗卫星导航系统是我国自主研发的新一代卫星导航系统, 卫星上均装载了激光反射器, 以厘米或毫米级精度卫星激光测距作为北斗卫星精密测轨与微波测量系统的独立外部标校手段。为增强北斗卫星的激光观测能力, 上海激光...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    6.2.2 控件生命周期中的装载和保存视图阶段196 6.2.3 简单类型视图状态应用197 6.2.4 实现自定义类型视图状态205 6.3 控件状态机制217 6.4 视图状态和控件状态的关系221 6.4.1 在禁用视图状态的情况下仍然使用...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

Global site tag (gtag.js) - Google Analytics