1、构造方法的反射 package itcast.cn.Reflect; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; public class TestReflect { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub String str1 = "abc"; String str2 = "bcd"; Person p = new Person(); Class cls1 = str1.getClass(); Class cls2 = str2.getClass(); Class cls3 = p.getClass(); Constructor constructor = str1.getClass().getConstructor(StringBuffer.class); String str = (String) constructor.newInstance(new StringBuffer("abc")); // 创建一个String对象 System.out.println(str.charAt(2)); } } 2、普通方法的反射 package itcast.cn.Reflect; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; public class TestReflect { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub String str1 = "abc"; //str1.charAt(1); Method methodCharAt = str1.getClass().getMethod("charAt", int.class); System.out.println(methodCharAt.invoke(str1, 1)); System.out.println(methodCharAt.invoke(str1, new Object[] {2})); } } 3、成员变量的反射 package itcast.cn.Reflect; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; // 使用反射将一个类中的成员变量为String类型的值中的"b"替换成"a" public class TestReflect { public static void main(String[] args) throws Exception { ReflectPoint rp = new ReflectPoint(3, 5); Field fieldY = rp.getClass().getField("y"); System.out.println(fieldY.get(rp)); Field fieldX = rp.getClass().getDeclaredField("x"); fieldX.setAccessible(true); System.out.println(fieldX.get(rp)); System.out.println("在没有使用反射之前:" + rp.toString()); changeFieldValue(rp); System.out.println("在没有使用反射之后:" + rp.toString()); } private static void changeFieldValue(Object obj) throws Exception { Field[] fields = obj.getClass().getFields(); for (int i=0; i<fields.length; i++) { Field field = fields[i]; if (field.getType() == String.class) { String oldValue = (String)field.get(obj); String newValue = oldValue.replace("b", "a"); //System.out.println(changeValue); field.set(obj, newValue); } } } } ReflectPoint.java package itcast.cn.Reflect; public class ReflectPoint { private int x; public int y; public String s1 = "bbbb"; public String s2 = "abcd"; public String s3 = "aabb"; public ReflectPoint(int x, int y) { this.x = x; this.y = y; } public String toString() { return "s1: " + s1 + " s2: " + s2 + " s3: " + s3; } }