反射 Reflect

public class TestReflect {
	public static void main(String[] args) {
//		getConstructor();
//		getMothed();
//		getFiled();
		getArrayFieldMethod();
	}
/**
 * 	通过反射获取参数是数组的方法
 */
	private static void getArrayFieldMethod() {
		try {
			
			//获取参数是数组的方法
			Class person4 = Class.forName("com.fanshe1.Person");
			Method method =person4.getMethod("printArray", String [].class);
			Object obj = person4.newInstance();
			method.invoke(obj,(Object) new String[]{"aaa","bbb","ccc"});
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/**
	 * 通过反射获取属性
	 */
	private static void getFiled() {
		try {
			 Class person3 = Class.forName("com.fanshe1.Person");
			 System.out.println("111");
				//获取公开字段 
//			Field[] fields = person3.getFields();
//			for(Field field:fields){
//				System.out.println(field);
//			}
			//获取私有字段
			Field[] declaredFields = person3.getDeclaredFields();
			for(Field field : declaredFields){
				System.out.println(field);
			}
			
			Field field = person3.getDeclaredField("name");
			field.setAccessible(true);
			Object obj = person3.newInstance();
			field.set(obj, "小六");
			String str = (String)field.get(obj);
			System.out.println(str);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/**
	 * 通过反射获取方法(参数 返回值)
	 */
	private static void getMothed(){
		try {
			//获取类的对象
			Class person2 = Class.forName("com.fanshe1.Person");
		
			//获取所有继承链中公共的方法
//			Method[] methods = person2.getMethods();
//			for(Method method:methods)
//			{
//				System.out.println(method);
//			}
			
			//获取所有该类中公共和私有的方法
//			Method[] declaredMethods = person2.getDeclaredMethods();
//			for(Method method:declaredMethods){
//				System.out.println(method);
//			}
			
			
			//获取无参无返回值
			Method method = person2.getMethod("showInfo", null);
			Object obj = person2.newInstance();
			method.invoke(obj, null);
			
			//获取带参数无返回值
			Method method1 = person2.getMethod("showInfo", String.class);
			method1.invoke(obj, "北京");
			
			//获取无参有返回值
			Method method2 = person2.getMethod("getInfo", null);
			String str = (String)method2.invoke(obj, null);
			System.out.println(str);
			
			//获取私有方法
			Method method3 = person2.getDeclaredMethod("data", null);
			method3.setAccessible(true);
			method3.invoke(obj, null);
			
			//获取静态方法
			Method method4 = person2.getMethod("staticmethod", null);
//			method4.setAccessible(true);
			method4.invoke(null, null);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 通过反射获取构造方法
	 */
	private static void getConstructor() {
		// TODO Auto-generated method stub
		try {
			Class person1 = Class.forName("com.fanshe1.Person");
//			Constructor[] constructors = person1.getConstructors();
//			for(Constructor constructor:constructors)
//			{
//				System.out.println(constructor);
//			}
			Constructor con1= person1.getConstructor(String.class,int.class,String.class);
			Object obj1 = con1.newInstance("aa",18,"男");
			System.out.println(obj1.toString());
			
			Object obj2 = person1.newInstance();
			System.out.println(obj2);
			
			
			
		}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

posted @ 2017-08-02 18:07  生如夏花般绚烂  阅读(169)  评论(0编辑  收藏  举报