反射就是把Java类中的各个部分,映射成一个个的Java对象,拿到这些对象后可以做一些事情。
一. 反射机制相关类
(1)java.lang.Class<T>
参数类型 T - 由此类对象建模的类的类型。 例如, String.class的类型是Class<String> 。 如果正在建模的类是未知的,请使用Class<?> 。
1. static Class<?> forName(String className); //返回指定类或接口的字节码对象。
2. T newInstance(); //创建字节码对象表示的类的实例。
Class<?> classBook = Class.forName("com.android.Book");
Book book = (Book)classBook.newInstance();
3. String getName(); //返回类的完整路径名 。
4. String getSimpleName();//返回类名
5. Class<? super T> getSuperclass(); //返回当前类继承的父类的名字
6. Class<?>[] getInterfaces(); //返回当前类实现的类或是接口
-----------------------------------------------------------------------------
7. Field getField(String name) ;//返回指定的公有的属性对象
8. Field getDeclaredField(String name);//返回指定的属性对象
Class<?> bookClass = Class.forName("com.android.Book"); Field tagField = bookClass.getDeclaredField("TAG");//反射私有属性,包括静态属性。 tagField.setAccessible(true); Object bookObject = classBook.newInstance(); String tag = (String) fieldTag.get(bookObject);
-----------------------------------------------------------------------------
9. Constructor<T> getConstructor(Class...<?> parameterTypes);// 返回该类中与参数类型匹配的公有构造方法
10. Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) //返回该类中与参数类型匹配的构造方法
(2) java.lang.reflect.Constructor<T>
Constructor代表类的构造方法。
T newInstance(Object... initargs);//根据传递的参数创建类的对象
Class<?> bookClass = Class.forName("com.android.Book"); Constructor<?> declaredConstructor = bookClass.getDeclaredConstructor(String.class,String.class); declaredConstructor.setAccessible(true); Book book = (Book)declaredConstructor.newInstance("Android开发","任玉刚");
(3)java.lang.reflect.Method
Method代表类的方法
Object invoke(Object obj, Object... args);//传递object对象和参数,调用该对象对应的方法。
Class<?> bookClass = Class.forName("com.android.Book"); Method bookMethod = bookClass.getDeclaredMethod("declaredMethod",int.class); bookMethod.setAccessible(true); Object bookObject = bookClass.newInstance(); String str = (String)bookMethod.invoke(bookObject,0);
(4)java.lang.reflect.Field
Field代表类的成员变量
boolean equals(Object obj);//将此Field与指定对象进行比较。
Object get(Object obj); //获得obj中对应的属性值
void set(Object obj,Object value);//设置obj中对应属性值