java 反射实例代码

Posted by Chris on March 1, 2017

做项目的时候不是很经常用到反射,当用到的时候,一些函数语法可能会忘记,写了个小例子,用的时候可以过来查找。

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

public class HelloWorld{
    public static void main(String[] args) throws Exception{
	
		//通过反射实例化对象
    	// Class<?> cls = HelloWorld.class;
		Class<?> cls = Class.forName("HelloWorld");
		System.out.println(cls.getName());
		Object obj = cls.newInstance() ;

		// 取得全部构造函数
		Constructor<?> cons [] = cls.getConstructors(); 
		for(int x = 0; x < cons.length; x++) {
			System.out.println(cons[x]);
		}
		
		// 取得指定构造函数
		Constructor<?> con = cls.getConstructor(String.class) ;
		if(con != null){
			Object objCon = con.newInstance("name");
			System.out.println(objCon);
		}

		// 取得全部方法
		Method met [] = cls.getMethods() ; 
		for(int x = 0; x < met.length; x++) {
			System.out.println(met[x]);
		}
		
		// 调用类之中的方法
		//HelloWorld hw = (HelloWorld)obj;
		//hw.sayHello("Chris");
		Method sayHelloMethod = cls.getMethod("sayHello", String.class);
		sayHelloMethod.invoke(obj, "Chris") ; // 等价于:hw.sayHello("Chris");
		
		// 调用 setName()、getName()方法
		String attribute = "Name"; 
		Method setMet = cls.getMethod("set"+ attribute, String.class);// setName()
		Method getMet = cls.getMethod("get"+ attribute);// getName()
		setMet.invoke(obj, "张三") ; // 等价于:setName("张三")
		System.out.println(getMet.invoke(obj));// 等价于:getName()
		
		// 取得全部属性
		Field field [] = cls.getDeclaredFields() ; 
		for(int x = 0; x < field.length; x++) {
			System.out.println(field[x]);
		}
		
		//利用反射操作类中的属性
		Field nameField = cls.getDeclaredField("name") ; // 找到name属性
		nameField.setAccessible(true) ; // 解除封装了
		nameField.set(obj, "张三") ;
		String nameValue = (String)nameField.get(obj);
		System.out.println(nameValue);
    }

 	private String name;
 	public String getName(){
 		return name;
 	}
 	public void setName(String _name){
 		name = _name;
 	}
    public HelloWorld() {
		//
	}
	public HelloWorld(String _name) {
		name = _name;
	}

    public void sayHello(String words){
    	if(name != null){
		   System.out.println(words + name);
    	}else{
    		System.out.println(words);
    	}
    }
}