一,先看一下反射的概念:
主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
看概念很晕的,继续往下看。
二,反射机制的作用:
1,反编译:.class-->.java
2,通过反射机制访问java对象的属性,方法,构造方法等;
这样好像更容易理解一些,下边我们具体看怎么实现这些功能。
三,在这里先看一下sun为我们提供了那些反射机制中的类:
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
四。从例子看常用的用法:
package reflect;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
public class ReflectTest implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6957472993081091730L;
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException {
Class<?> class1 = null;
Class<?> class2 = null;
Class<?> class3 = null;
class1 = Class.forName("reflect.ReflectTest");//实例化Class类对象-1
class2 = new ReflectTest().getClass();//实例化Class类对象-2
class3 = ReflectTest.class;//实例化Class类对象-3
Class<?> parentClass = class1.getSuperclass();//获得父类
Class<?> intes[] = class1.getInterfaces();//获得所有接口
Class<?> class4 = Class.forName("reflect.User");//完整路径的类名,包括package name
User user1 = (User) class4.newInstance();// create a user through reflect
user1.setUsername("lilong");
Constructor<?> cons[] = class4.getConstructors();
ReflectTest reflectTest = new ReflectTest();
System.out.println("通过一个对象获得完整的包名和类名:" + reflectTest.getClass().getName());
System.out.println("
Java基础之反射及动态代理,反射实现工厂模式
最新推荐文章于 2023-09-01 21:08:30 发布