1 public class User { 2 //类的属性 3 //public int userId; 4 private int userId; 5 private String userName; 6 private String password; 7 //公有的取值,赋值方法 8 public int getUserId() { 9 return userId; 10 } 11 public void setUserId(int userId) { 12 this.userId = userId; 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 this.password = password; 25 } 26 //构造方法 27 public User() { 28 // TODO Auto-generated constructor stub 29 } 30 public User(int userId, String userName, String password) { 31 super(); 32 this.userId = userId; 33 this.userName = userName; 34 this.password = password; 35 } 36 37 38 }
1 public class Test1 { 2 public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException { 3 String path = "fanshe.User"; 4 //(1)获取类的名称 5 Class c = Class.forName(path); 6 System.out.println("(1)获取类的名称"); 7 System.out.println("类的全名称:"+c.getName()); //fanshe.User 8 System.out.print("类的名称:"+c.getSimpleName()); //User 9 System.out.println(" --------------------------"); 10 11 //获取父类的Class对象 12 Class csuper = c.getSuperclass(); 13 System.out.println("获取父类的Class对象"); 14 System.out.println("类的全名称:"+csuper.getName()); //java.lang.Object 15 System.out.print("类的名称:"+csuper.getSimpleName()); //Object 16 System.out.println(" --------------------------"); 17 18 //(2)获取类的属性信息 19 //Field f=c.getField("userId"); //只能获取公共的属性 20 //System.out.println(f); 21 System.out.println("获取类的属性信息"); 22 Field [] fields=c.getFields(); //只能获取公共的属性 23 System.out.println(fields.length); //0 24 25 Field [] fields2 = c.getDeclaredFields(); 26 System.out.println(fields2.length); //3 27 for (Field field : fields2){ 28 //System.out.println(field);//调用了toString()方法 29 System.out.println(field.getModifiers()+" "+field.getType()+" "+field.getName()); //field.getModifiers():访问权限,2代表private 30 } 31 32 33 //(3)获取类的方法信息 34 System.out.println("(3)获取类的方法信息"); 35 Method[] methods = c.getDeclaredMethods();//本类中的公共的方法对象 36 //System.out.println(methods.length); //6 37 for(Method method:methods){ 38 //System.out.println(method); 39 System.out.println("访问权限"+method.getModifiers()); 40 System.out.println("返回值类型:"+method.getReturnType()); 41 System.out.println("方法的名称:"+method.getName()); 42 //获取方法的参数 43 System.out.println("//获取方法的参数"); 44 Class [] cPara=method.getParameterTypes(); 45 for (Class c1 : cPara) { 46 System.out.println(c1.getTypeName()+" "); 47 } 48 System.out.println(" --------------------------"); 49 } 50 System.out.println(" ============================= "); 51 52 53 //(4)获取类的构造器 54 System.out.println("(4)获取类的构造器"); 55 Constructor [] cons=c.getConstructors(); 56 for (Constructor constructor : cons) { 57 System.out.println(constructor); 58 } 59 System.out.println(" ====================="); 60 //获取指定的构造方法 61 System.out.println("获取指定的构造方法"); 62 Constructor con=c.getConstructor(null); 63 System.out.println(con); 64 System.out.println(" ====================="); 65 Constructor con2=c.getConstructor(int.class,String.class,String.class); 66 System.out.println(con2); 67 } 68 }
2.5 动态的操作属性、方法、构造方法
1 public class Test2 { 2 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException { 3 //获到Class类的对象 4 Class c=Class.forName("com.bjsxt.entity.User"); 5 6 //(1)得到无参构造方法的对象 7 Constructor cons=c.getConstructor(null); 8 //通过无参构造方法的对象,创建User类的对象 9 User user=(User) cons.newInstance(); 10 11 //(2)动态操作属性 12 Field field=c.getDeclaredField("userId"); 13 field.setAccessible(true);//这个属性不需要做安全检查了,可以直接访问 14 field.set(user, 1001); //通过反射直接赋值 15 System.out.println("取出userId这个属性的值:"+field.get(user));//通过反射直接取值 16 17 //(3)动态操作方法 18 Method m=c.getDeclaredMethod("setUserName", String.class); 19 //执行setUserName这个方法 20 m.invoke(user, "张三"); 21 Method m2=c.getDeclaredMethod("getUserName", null); 22 System.out.println(m2.invoke(user)); 23 } 24 }