//反射分析类的结构——方法
package com.aowin.method;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import com.aowin.getclass.Student;
//1.获取分析的类的Class对象
//2.反射创建Class对象表示类的对象
//3.获取Class对象表示类中的方法:(1)public权限的方法(2)所有权限的方法
//4.调用方法,通过Method类中的invoke(Object,参数)方法
//注意:根据权限的不同,取消访问权限检查通过setAccessible()方法
public class MethodTest {
public static void main(String[] args) throws Exception {
//1.获取分析的类的Class对象
Class c = new Student().getClass(); //通过对象.getClass()
//2.反射创建Class对象表示类的对象
Constructor con = c.getDeclaredConstructor(String.class,int.class); //获得指定的所有权限的构造器
con.setAccessible(true);
Object obj = con.newInstance("张三",17);
//3.获取Class对象表示类中的方法
//(1)public修饰的方法
//获取所有的public修饰的方法,包括继承来的
Method[] ms = c.getMethods();
for(Method m:ms){
System.out.println(m);
}
//获取指定的public修饰的方法
Method mStudy = c.getMethod("study", int.class); //int.class:有一个int参数的方法
System.out.println(mStudy);
//调用方法:通过invoke(Object,参数);
mStudy.invoke(obj, 7); //7:实际参数值
//(2)所有权限的方法
//获取所有的所有权限的方法,不包括继承的
Method[] deMs = c.getDeclaredMethods();
for(Method m:deMs){
System.out.println(m);
}
//获取指定的所有权限的方法
Method mSleep = c.getDeclaredMethod("sleep",null); //null:空参数的方法
System.out.println(mSleep);
//取消访问权限检查
mSleep.setAccessible(true);
//调用方法
mSleep.invoke(obj, null);
}
}