您的位置:首页 > 其它

反射练习

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();
		}
	}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: