Java基础(十一)-----Java的反射机制(二)

2014-11-24 03:05:41 · 作者: · 浏览: 2
ect.demo; import java.lang.reflect.Field; public class ReflectDemo3 { public static void main(String[] args) { fieldDemo_1(); } //Filed类存在两种得到字段的方法,一个是得到所有的非私有的字段。另外一个是 //得到所有的字段(包括私有的),但是此时,只提供了对字段的“跟踪”,却不能访问该字段,若想访问,需要暴力破解 public static void fieldDemo_1() { String className = "com.reflect.demo.Person"; try { Class clazz=Class.forName(className); Field f=clazz.getDeclaredField("age"); Person p=(Person)clazz.newInstance(); f.setAccessible(true);//暴力破解,让虚拟机不检查该字段的安全性 f.set(p, 22);//修改该对象对应的字段值。 int age =f.getInt(p);//访问字段 System.out.println(age); }catch(Exception e) { e.printStackTrace(); } } }


Method类

Method类是 Java类中方法的表示。同上面一样,该类提供了一系列访问与方法有关的对象,比如:返回值,参数(构造方法和方法都有),该类还可以用来调用该对象表示的方法。代码示例:
package com.reflect.demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
	/*
	 * 获取指定类中的方法。
	 * 
	 */
public class ReflectDemo4 {

	public static void main(String[] args) {
		methodDemo_2();
	
	}
	
	
	//得到无参的方法,并回调该对象代表的方法。
	public static void methodDemo_1()
	{
		String  className="com.reflect.demo.Person";
		try
		{
			Class clazz =Class.forName(className);
			Method m=clazz.getMethod("show", null);
			Person p =(Person)clazz.newInstance();
			m.invoke(p, null);
			
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}
	
	public static void methodDemo_2()
	{

		String  className="com.reflect.demo.Person";
		try
		{
			Class clazz =Class.forName(className);
			Method m=clazz.getMethod("paramMethod", String.class,int.class);
			Person p =(Person)clazz.newInstance();
			m.invoke(p, "wangwu",22);
			
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}


}