反射练习
2014-05-26 13:22
169 查看
Friends
public class Friends { public int number=250; private String name; private int age; private String address; // public Friends() { // System.out.println("默认构造器正在运行!"); // } public Friends(String name, int age, String address) { this.name = name; this.age = age; this.address = address; System.out.println("新创建一个对象!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public void makingFriends(){ System.out.println("今天新交了一个朋友!他叫"+getName()+"今年"+getAge()+"岁,家住"+getAddress()); } public String Saying(){ return "老子都还没开腔,她就把我电话挂了"; } }
<pre name="code" class="java">package com.book.reflect0; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { public static void main(String[] args) { try { //Friends man = new Friends(); //Class clazz = man.getClass(); //使用对象名调用其getClass()方法返回其对象所属类对应得Class对象 //Class clazz = Friends.class; //如果在编译期知道类名,直接调用其class属性来获得其对象的Class对象 Class clazz = Class.forName("com.book.reflect0.Friends"); //在编译期不知道类名,运行期知道类名,使用Class类的forName()静态方法来获得其Class对象 Constructor con = clazz.getConstructor(String.class,int.class,String.class); //Method m = clazz.getMethod("makingFriends", types); Object friend = con.newInstance("向政先",20,"四川达州"); Method m = clazz.getMethod("makingFriends"); Method m1 = clazz.getMethod("Saying"); m.invoke(friend, null); //通过invoke()方法调用对应的方法 String s = (String) m1.invoke(friend); System.out.println(s); Field f = clazz.getField("number"); //通过Field()访问属性 Integer in = (Integer) f.get(friend); System.out.println(in); f.set(friend, 38); System.out.println(f.get(friend)); Method m2 = clazz.getMethod("setAge", Integer.TYPE);//通过set和get方法修改属性 m2.invoke(friend, 30); m.invoke(friend); // Field[] f = clazz.getDeclaredFields(); //查所有的属性 // Constructor[] con = clazz.getDeclaredConstructors(); //查所有构造函数 // Method[] m = clazz.getDeclaredMethods(); //查所有方法 // System.out.println(Arrays.toString(f)); // System.out.println(Arrays.toString(con)); // System.out.println(Arrays.toString(m)); } catch (Exception e) { e.printStackTrace(); } } }