JAVA反射机制及应用例子

JAVA 反射机制是Java 被视为动态(或准动态)语言的个关键性质。这个机制允许程式在运行时通过Reflection APIs 取得任何个已知名称的class 的内部资讯,包括其modifiers(诸如public, private,static 等等)、superclass(例如Object)、interfaces(例如Cloneable),也包括fields methods 的所有资讯, 并在运行时调用任意一个对象的方法;生成动态代理。下面以一段代码来看一下主要的Reflection APIs,代码中有相应的注释。

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Goods
{
	private String id;
	private double price;

	public Goods(){
		System.out.println("it is a pen");
	}
	
	public Goods(String s1,String s2){
		System.out.println(s1+"*"+s2);
	}
	
	public String getId()
	{
		System.out.println(id);
		return id;
	}
	public void setId(String id)
	{
		this.id = id;
	}
	public String addName(String str1,String str2){
		return str1+str2;
	}
	/**
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws NoSuchMethodException 
	 * @throws SecurityException 
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 * @throws NoSuchFieldException 
	 * @功能描述  
	 * @输入参数  
	 * @反馈值    
	 */
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException
	{
		// TODO Auto-generated method stub
		String str = "com.xtlh.sinye.Goods";
		Class c = Class.forName(str);
		Object obj = c.newInstance();//初始化一个Goods的对象
		
		/**
		 * //这里设置属性的值 调用setId()方法,类型用Class[],参数用Object[]
		 */
		Method m = c.getMethod("setId",new Class[]{Class.forName("java.lang.String")}); 
		m.invoke(obj,new Object[]{"it's apple"}); 
		System.out.println("---------------------------------------------------------------------");
		
		/**
		 * //这里是里获取属性的值 调用getId()方法
		 */
	    m = c.getMethod("getId",new Class[]{}); 
	    m.invoke(obj,new Object []{}); 
	    System.out.println("---------------------------------------------------------------------");
	    
	    /**
	     * //获得类中声明的方法
	     */
	    Method me[] = c.getDeclaredMethods(); 
	    for(int i=0;i

 

 

 

你可能感兴趣的:(java)