反射reflect
Posted lamsey16
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射reflect相关的知识,希望对你有一定的参考价值。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
Class
众所周知Java有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class 对象。
Method method = getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this, request,response);
1.理解Class类对象并实例化Class类对象
java.lang.Class是反射的源头
在Object类中定义了
public final native Class<?> getClass();
会被所有子类继承,返回值是一个Class类,此类事java反射的源头。
类加载器:把类装载进内存
jvm规范
1)启动类加载器
2)用户自定义加载器
jvm运行时产生3个类加载器:
1)引导类加载器:java平台的核心库
2)扩展类加载器:负责jre/lib/ext目录下的jar包。。。
3)系统类加载器
java.lang.reflect.Method代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造方法
2.运行时创建类对象并获取完整结构
有了Class对象,能做什么?
、
//通过Class静态方法获取 String className = "com.lamsey.Person"; Class<?> class1 = Class.forName(className); System.out.println("class1:"+class1); //获得class后干啥? //创建类的对象:调用Class的newInstance方法 /** * 需求:1)创建的类必须有一个无参的构造器 * 2)类的构造器访问权限足够 */
//无参构造器创建对象 Person person = (Person) class1.newInstance(); System.out.println("person:"+person);
//有参构造器创建对象 Constructor<?> constructor = class1.getDeclaredConstructor(String.class,int.class); System.out.println("constructor: "+constructor); Person object = (Person) constructor.newInstance("123",12); System.out.println(object);
3.通过反射调用类的指定方法、指定属性
4、动态代理
在程序运行时根据动态创建目标类的代理对象
以上是关于反射reflect的主要内容,如果未能解决你的问题,请参考以下文章