java之反射(回顾)

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException,
			NoSuchMethodException, SecurityException, IllegalArgumentException,
			InvocationTargetException, NoSuchFieldException {
		Class<?> c = Model.class;
		// 获得所有属性
		Field[] fields = c.getDeclaredFields();
		for (Field f : fields) {
			System.out.println(f.getName());
		}
		System.out.println("------------------------");
		// 产生一个对象 ,无参构造
		Object object = c.newInstance();
		// 获得方法
		Method setUsername = c.getMethod("setUsername", String.class);
		// 调用方法
		setUsername.invoke(object, "1234");
		Method getUsername = c.getMethod("getUsername");
		Object re = getUsername.invoke(object);
		System.out.println(re);
		System.out.println("------------------------");
		// 有参数构造
		Object object2 = c.getConstructor(String.class, String.class)
				.newInstance("123456", "111");
		Object re2 = getUsername.invoke(object2);
		System.out.println(re2);
		System.out.println("------------------------");
		// 调用私有方法
		Method f = c.getDeclaredMethod("f");
		f.setAccessible(true);// 忽略java对private的检测
		Object re3 = f.invoke(object);
		System.out.println(re3);
		System.out.println("------------------------");
		// 访问私有成员
		Field ff = c.getDeclaredField("username");
		ff.setAccessible(true);
		ff.set(object, "test");
		Object re4 = getUsername.invoke(object);
		System.out.println(re4);
	}
}


public class Model {
	private String username, password;

	public Model(String username, String password) {
		this.username = username;
		this.password = password;
	}

	public Model() {
	}

	private String f() {
		return "这是一个私有方法!";
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值