反射練習

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




發佈了32 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章