方法介绍 http://www.cnblogs.com/mengdd/archive/2012/08/18/2645553.html
1 成员方法的反射(Object a):
Method method=a.getClass().getMethod(方法名称,方法参数); //new Class[]{JSONObject.class} ("main",new Class[]{String[].class});
int kk=(Integer) method.invoke(object, new Object[] {j});
备注 :枚举类 都有一个name()方法
2 公有成员变量的获取
Field fieldIsDelay=msgType.getClass().getField("isDelay");
boolean isDelay=(Boolean) fieldIsDelay.get(msgType);
3 私有成员变量的暴力获取
Field fieldIsDelay=msgType.getClass().getDeclaredField("isDelay");
fieldIsDelay.setAccessible(true);//暴力反射
boolean isDelay=(Boolean) fieldIsDelay.get(msgType);
4 Class.forName()与ClassLoader.loadClass的区别
//通过类装载器获取Car类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.baobaotao.reflect.Car"); //只装载类,没初始化
Class.forName("XXX.XXX", true, CALLCLASS.class.getClassLoader()); 第二次参数表示装载类的时候是否初始化该类,即调用类的静态块的语句及初始化静态成员变量。
UserReflec.java
1 package com.loginSystem.test; 2 import java.lang.reflect.Array; 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 import org.junit.Test; 7 import com.loginSystem.domain.User; 8 public class UserReflect { 9 @Test 10 public void classlei() throws ClassNotFoundException, InstantiationException, IllegalAccessException{ 11 /* User user=new User(); 12 Class<? extends User> cls=user.getClass(); 13 System.out.println(User.class); 14 try { 15 System.out.println(Class.forName(cls.getName())==cls); 16 } catch (ClassNotFoundException e) { 17 e.printStackTrace(); 18 } 19 System.out.println(user.getClass()); 20 cls.isPrimitive(); 21 cls.isArray();*/ 22 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 23 Class<?> clazz = loader.loadClass("com.loginSystem.domain.User"); 24 System.out.println("ddddddddddd1"); 25 Class.forName("com.loginSystem.test.UserReflect", false, User.class.getClassLoader()); 26 System.out.println("ddddddddddd2"); 27 Class<?> cls=Class.forName("com.loginSystem.domain.User"); 28 System.out.println(clazz); 29 System.out.println(cls); 30 } 31 32 //@Test 33 public void ref() throws Exception{ 34 User user=new User(); 35 //1无参,带参构造函数 36 Class<? extends User> cls=user.getClass(); 37 cls.newInstance(); 38 39 Constructor<? extends User> cons=user.getClass().getConstructor(int.class,String.class,String.class); 40 Object o=cons.newInstance(3,"user","123"); 41 System.out.println(o.getClass().getName()); 42 43 //2获得指定Field的值 44 Field creditsF=cls.getField("credits"); 45 int credits=(Integer) creditsF.get(o); 46 System.out.println("credits="+credits); 47 48 Field nameF=cls.getDeclaredField("userName"); 49 nameF.setAccessible(true); 50 String name=(String) nameF.get(o); 51 System.out.println("name="+name); 52 53 //3给指定Field赋值 54 nameF.set(o, "xumin"); 55 System.out.println(nameF.get(o)); 56 57 //4获取所有Field名与值 58 Field []fields=cls.getDeclaredFields(); 59 for(Field f:fields){ 60 f.setAccessible(true); 61 boolean b=f.isAccessible(); 62 f.get(o); 63 System.out.println(b+":"+f+" = "+f.get(o)); 64 } 65 66 Field []fs=cls.getFields(); 67 for(Field f:fs){ 68 f.get(o); 69 System.out.println(f+" = "+f.get(o)); 70 } 71 } 72 73 //@Test 74 public void methodFlect() throws Exception{ 75 //定义一个对象 76 User user=new User(); 77 Class<? extends User> cls=user.getClass(); 78 Object o=cls.getConstructor(int.class,String.class,String.class).newInstance(5,"xx","123"); 79 //1调用一个方法 80 Method m=cls.getMethod("credit", int.class,int.class); 81 Object[] zhi1=(Object[]) m.invoke(o, 3,5); 82 System.out.println(zhi1.length); 83 for(Object a:zhi1){ 84 System.out.println(a); 85 } 86 //2处理数组 87 Object zhi2=(Object[])m.invoke(o, 5,5); 88 if(zhi2.getClass().isArray()){ 89 //方法1 获得数组里每个值 90 Object[] zhi3=(Object[]) zhi2; 91 for(Object a:zhi3){ 92 System.out.println(a.getClass()); 93 } 94 //方法2 获得数组里每个值 95 for(int i=0;i<Array.getLength(zhi2);i++){ 96 System.out.println(Array.get(zhi2, i)); 97 } 98 } 99 100 } 101 }
User.java

1 package com.loginSystem.domain; 2 3 import net.sf.json.JSONObject; 4 5 public class User { 6 static{ 7 password="1111"; 8 System.out.println("静态代码块运行"); 9 } 10 private String userName; 11 static private String password; 12 public int credits; 13 14 public String getUserName() { 15 return userName; 16 } 17 public void setUserName(String userName) { 18 this.userName = userName; 19 } 20 public String getPassword() { 21 return password; 22 } 23 public void setPassword(String password) { 24 User.password = password; 25 } 26 public int getCredits() { 27 return credits; 28 } 29 public void setCredits(int credits) { 30 this.credits = credits; 31 } 32 public User(){ 33 credits=10; 34 userName="name"; 35 36 System.out.println("instance***************"); 37 System.out.println("credits="+credits+";userName="+userName+";password="+password); 38 } 39 40 public User(int a,String b,String c){ 41 credits=a; 42 userName=b; 43 password=c; 44 System.out.println("credits="+credits+";userName="+userName+";password="+password); 45 } 46 47 public String[] credit(int q,int m){ 48 System.out.println("credit****************"); 49 if(q==3){ 50 System.out.println("3****************"); 51 return new String[]{"a3","b3","c3"}; 52 } 53 else{ 54 System.out.println(q+"****************"); 55 return new String[]{"a3","b6","c9"}; 56 } 57 } 58 59 public JSONObject jsonName(JSONObject a){ 60 a.put("xumin", "111"); 61 return a; 62 } 63 }