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);
}
}