获取Method类
通过Class类的以下方法,我们可以获得构造器。
l public Method [] getMethods ():获取自己的包括父亲的公共方法
l public Method [] getDeclaredMethods():获取自己的所有的方法
l public MethodgetMethod(String name,Class<?>... parameterTypes):获取单个公共方法,第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型。
// 获取字节码文件对象
Class c = Class.forName("cn.itcast_01.Person");
// 获取不带参数的show方法
Method m1 = c.getMethod("show");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
m1.invoke(obj);// 调用obj对象的m1方法
// 获取带参数的method方法
Method m2 = c.getMethod("method",String.class);
m2.invoke(obj,"hello"); //调用obj对象的m2方法,并传入参数“hello”
l public Method getDeclaredMethod (String name):获取单个方法(包括私有的,但要用Method类的setAccessible方法设置访问权限),第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型。
// 获取字节码文件对象
Class c = Class.forName("cn.itcast_01.Person");
// 获取私有的function方法
Method m4 = c.getDeclaredMethod("function");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
m4.setAccessible(true);// 取消Java语言访问检查
m4.invoke(obj);// 调用obj对象的m1方法
Method类的常用方法
l public void setAccessible(boolean flag):值为true则指示反射的对象在使用时应该取消Java语言访问检查。
l public Object invoke(Object obj , Object... args):对带有参数的指定对象obj调用由此
Method
对象表示的底层方法,如果方法有返回值,则返回Object类型的值
// 获取字节码文件对象
Class c = Class.forName("cn.itcast_01.Person");
// 获取私有的function方法
Method m4 = c.getDeclaredMethod("function");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
m4.setAccessible(true);// 取消Java语言访问检查
m4.invoke(obj);// 调用obj对象的m1方法
// 获取toString方法
Method m5 = c.getMethod("toString" ,String.class);
Stringstr=(String)m5.invoke(obj , “hello”);