参考文章:http://java-cd.iteye.com/blog/544283
1. 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:
Class类:代表一个类;
Field 类:代表类的成员变量(成员变量也称为类的属性);
Method类:代表类的方法;
Constructor 类:代表类的构造方法;
Array类:提供了动态创建数组,以及访问数组的元素的静态方法;
2. Class类是Reflection API 中的核心类,它有以下方法:
getName():获得类的完整名字;
getFields():获得类的public类型的属性;
getDeclaredFields():获得类的所有属性;
getMethods():获得类的public类型的方法;
getDeclaredMethods():获得类的所有方法;
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型;
getConstructors():获得类的public类型的构造方法;
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型;
newInstance():通过类的不带参数的构造方法创建这个类的一个对象;
3. 默认构造方法创建一个新对象:
Object objectCopy=classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
4. 获得对象的所有属性:
Field fields[]=classType.getDeclaredFields();
为一个class生成对应的Class object的五种方法:
1.运用getClass()方法:
String str = "abc";
Class class = str.getClass();
2.运用Class.getSuperclass()方法:
Button b = new Button();
Class c1 = b.getSuperclass();
Class c2 = c1.getSuperclass();
3.运用静态方法Class.forName(),这个最常用:
Class c1 = Class.forName("java.lang.String");
Class c2 = Class.forName("java.util.Date");
4.运用.class语法:
Class c1 = String.class;
Class c2 = java.awt.Button.class;
Class c3 = int.class;
Class C4 = int[].class;
5.运用原始包装类的TYPE方法:
Class c1 = Integer.TYPE;
Class c2 = Character.TYPE;
Class c3 = Boolean.TYPE;
Class c4 = Void.TYPE;