個人日記2017.08.12

反射:
public class User {
	public String name;
	private int age;

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public User() {
	}

	private void run() {
		System.out.println("我會跑");
	}

	private void run(String name) {
		System.out.println(name + "我會跑");
	}

	public void say() {
		System.out.println("我會說話");
	}

	public static void main(String[] args) throws ClassNotFoundException,
			NoSuchFieldException, SecurityException, NoSuchMethodException,
			IllegalAccessException, IllegalArgumentException,
			InvocationTargetException, InstantiationException {
		// 加載這個類的class文件
		Class c = Class.forName("com.sxt.User");
		// 創建一個實例化的對象
		User u = (User) c.newInstance();
		// 類的全路徑
		System.out.println(c.getName());
		// 類的名稱
		System.out.println(c.getSimpleName());
		// 返回類的權限
		System.out.println(Modifier.toString(c.getModifiers()));
		// 判斷是否是接口
		System.out.println(c.isInterface());
		// 拿到父類的全稱
		System.out.println(c.getSuperclass().getName());
		// 父類的名字
		System.out.println(c.getSuperclass().getSimpleName());
		// 獲取類中的public的屬性
		Field f = c.getField("name");
		System.out.println(f.getName());
		// 獲取所有權限類型的屬性
		Field age = c.getDeclaredField("age");
		System.out.println(age.getName());

		// 獲取所有public的屬性
		Field[] fs = c.getFields();
		// 獲取所有類型的所有屬性
		Field[] dfs = c.getDeclaredFields();
		System.out.println(dfs.length);
		System.out
				.println("======================================================");
		// 獲取所有公共方法包含父類和接口
		Method[] ms = c.getMethods();
		for (Method m : ms) {
			System.out.println(m.getName());
		}
		System.out
				.println("======================================================");
		// 通過方法名獲取公共方法
		Method m = c.getMethod("say");
		System.out.println(m.getName());
		System.out
				.println("======================================================");
		// 獲取所有本類的方法
		Method[] bms = c.getDeclaredMethods();
		for (Method bm : bms) {
			System.out.println(bm.getName());
		}
		System.out
				.println("======================================================");
		// 通過名字獲取本類的方法
		Method bm = c.getDeclaredMethod("run");
		System.out.println(bm.getName());
		// 調用本類的帶參數的方法
		Method cm = c.getDeclaredMethod("run", String.class);
		cm.invoke(u, "張三");
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章