反射机制调用无参和有参方法以及调用私有方法

package reflect;

public class Person {
	
	public void sayHello() {
		System.out.println("HelloJava");
	}
	public void sayName() {
		System.out.println("大家好");
	}
	public void sayAge(int age) {
		System.out.println("我的年龄是:"+age+"岁了...");
	}
	public void say(String name,int age) {
		System.out.println("我叫"+name+",我今年"+age+"岁了。");
	}
	private void domose() {
		System.out.println("我是Preson类的私有方法...");
		
	}
}

  

  调用person类中无参方法

package reflect;

import java.lang.reflect.Method;
/**
 * 通过反射机制调用某个类的某个方法
 */

public class ReflectDemo1 {
	public static void main(String[] args) throws Exception  {
		
		Class cls = Class.forName("reflect.Person");
		//接收的是一个Person的实例
		Object o =cls.newInstance();
		/*
		 * 通过该Class实例可以获取其表示的类的相关方法
		 * 获取Person的sayHello方法
		 * 
		 */
		Method method =cls.getDeclaredMethod("sayHello", null);
		method.invoke(o, null);
	}

}

  调用person类中有参方法

package reflect;

import java.lang.reflect.Method;

/**反射调用有参方法
* 
*/
public class ReflectDemo3 {
public static void main(String[] args) throws Exception {
Class cls = Class.forName("reflect.Person");
Object o =cls.newInstance();
Method method=cls.getDeclaredMethod("sayAge",new Class[] {int.class});

method.invoke(o, new Object[] {20});

Method method1=cls.getDeclaredMethod("say",new Class[] {String.class,int.class});
method1.invoke(o,new Object[] {"zhangsan",18});
}

}

  

调用Person类中的私有方法

package reflect;

import java.lang.reflect.Method;

//反射机制调用私有方法
public class ReflectDemo4 {
	public static void main(String[] args) throws Exception  {
		Class cls = Class.forName("reflect.Person");
		Object o =cls.newInstance();
		Method method=cls.getDeclaredMethod("domose",null);
		//强制要求访问该方法  setAccessible(true);
		method.setAccessible(true);
		method.invoke(o, null);
		
	}

}

  

  

posted @ 2018-01-25 11:44  清风已来  阅读(5294)  评论(0编辑  收藏  举报