动态装载
一 程序运行的过程
二 classLoader类加载机制
1 并非一次性加载
2 需要的时候加载即运行期间动态加载
3 static语句块在加载后执行一次
4 dynamic语句块每次new新的对象都会执行(等同与构造方法中的语句,少用)
说明:
1,2点是说程序在加载类时,并不是一次性把所有用到的类都加载进去,而是运行到哪里就加载到哪里,是动态的。
三JDK中classloader的分类
classLoader具体来说有四个
bootstrap classloader 负责核心类的加载
extension classloader 负责扩展类的加载
application classloader 负责自定义类的加载
other classloader
说明:
bootstrap classloader和extension classloader由c或汇编语言或c++操作系统本地语言写的。其他的classloader是用java写的。所以其他的classloader也需要由loader进来
四JDK中classloader的层次关系
如图:
classloader存在着层次关系,但不是继承。一个classloader要load class时会向上一层报告,查看是否已经load,如果load了就不会再次load。
反射机制
什么是反射?
反射机制就是我们可以通过反射的API接口可以探索运行期间的一个class的内部结构,并且根据他的内部结构来决定方法怎么样调用。
反射机制的核心类
类加载到内存中后就是一个个对象,其方法,属性等等也可以看作是一个对象。
class 类的类型对象,即每个类都有这样的一个属性表示类型。例如:Object.getClass()就可以得到该类的对象,相当于类名.class。
constructor 代表类中的构造方法
field 代表类中的成员变量
method 代表类中的方法
modifier 代表类中的修饰符
这几个类就是我们实现反射机制的关键,首先我们要通过class.forName("XXX")得到加载到内存中XXX的class对象,然后再得到他的方法,成员变量来调用对象的方法。
实现反射的核心代码
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
分享到:
相关推荐
反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
Java中,反射是一种强大的工具。...反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内 部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。
spring基于xml配置加载bean 的demo 了解spring的反射机制
JAVA中的反射机制(内含大量实例)Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到...
Java中,反射是一种强大的工具。...反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。
反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
IO(输入/输出)是所有程序都必需的部分:使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备...
反射机制;多线程;IO/NIO; 网络编程;常用数据结构和相关算法。 2、对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式;设计模式;单例模式;工厂模式;代理模式;模板方法模式;责任链模式等。 3...
在写程序的时候,我们几乎不需要关心类的加载,因为这些都 是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加 载所需要的类。 Java 类的加载是动态的,它并不会一次性将所有类全部加载后再运 行,而是...
在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。 Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证...
listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.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 ...
4)对象与引⽤对象的区别 对象就是好没有初始化的对象,引⽤对象即使对这个对象进⾏了初始化,这个初始化可以使⾃⼰的直接new的也可以是直接其他的赋值的, 那么背new或者背其他赋值的我们叫做是引⽤对象,最⼤的...
北斗卫星导航系统是我国自主研发的新一代卫星导航系统, 卫星上均装载了激光反射器, 以厘米或毫米级精度卫星激光测距作为北斗卫星精密测轨与微波测量系统的独立外部标校手段。为增强北斗卫星的激光观测能力, 上海激光...
6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...
6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...
6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然...
6.2.2 控件生命周期中的装载和保存视图阶段196 6.2.3 简单类型视图状态应用197 6.2.4 实现自定义类型视图状态205 6.3 控件状态机制217 6.4 视图状态和控件状态的关系221 6.4.1 在禁用视图状态的情况下仍然使用...
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 ...
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 ...