黑马程序员——高新技术——反射2(指定类中的方法)

来源:互联网 发布:明源软件股份有限公司 编辑:程序博客网 时间:2024/06/11 23:12

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

反射指定类中的方法:

 

1.获取指定方法;

    getMethods();//获取的是该类中的公有方法和父类

getDeclaredMethods();//获取本类中的方法,包含私有方法。

2. 获取指定方法;

getMethod(methorName, obj, obj); //想要运行指定方法,当然是方法对象最清楚,为了让方法运行,调用方法对象的invoke方法即可,但是方法运行必须要明确所属的对象和具体的实际参数。

method.invoke(obj, 39,"hehehe");//执行一个方法

3. 想要运行私有方法。

//想要获取私有方法。必须用getDeclearMethod();

    Method method = clazz.getDeclaredMethod("method", null);

    // 私有方法不能直接访问,因为权限不够。非要访问,可以通过暴力的方式。

    method.setAccessible(true);//一般很少用,因为私有就是隐藏起来,所以尽量不要访问。

4. 反射静态方法。

clazz.getMethod("function",null);

    method.invoke(null,null); //只需要将invoke方法的第一个参数设为null即可!


package javaenhance;import java.lang.reflect.Method;public class test2 {public static void main(String[] args) throws Exception {method_1();method_2();method_3();method_4();}//获取类中所有的方法。public static void method_1() throws Exception {Class clazz = Class.forName("javaenhance.Person");Method[] methods = clazz.getMethods();//获取的是该类中的公有方法和父类中的公有方法。methods = clazz.getDeclaredMethods();//获取本类中的方法,包含私有方法。for(Method method : methods) {System.out.println(method);}System.out.println("获取类中所有的方法");System.out.println();}//获取指定方法;public static void method_2() throws Exception {Class clazz = Class.forName("javaenhance.Person");//获取指定名称的方法。Method method = clazz.getMethod("sayHello", int.class,String.class);//想要运行指定方法,当然是方法对象最清楚,为了让方法运行,//调用方法对象的invoke方法即可,但是方法运行必须要明确所属的对象和具体的实际参数。Object obj = clazz.newInstance();System.out.println(method.invoke(obj, 39,"Love"));//执行一个方法System.out.println("获取指定方法");System.out.println();}//想要运行私有方法。public static void method_3() throws Exception {Class clazz = Class.forName("javaenhance.Person");//想要获取私有方法。必须用getDeclearMethod();Method method = clazz.getDeclaredMethod("myPrivate", null);// 私有方法不能直接访问,因为权限不够。非要访问,可以通过暴力的方式。method.setAccessible(true);//一般很少用,因为私有就是隐藏起来,所以尽量不要访问。}//反射静态方法。public static void method_4() throws Exception {Class clazz = Class.forName("java.lang.Math");Method method = clazz.getMethod("abs", long.class);//只需要将invoke方法的第一个参数设为null即可!System.out.println(method.invoke(null, -10000l));System.out.println("反射静态方法。");}}class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String toString(){return "name:"+name+" age:"+age;}public String sayHello(int age,String name){return "My name is "+name+","+age+"years old ,nice to meet you ";}private void myPrivate(){System.out.println("i am private");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}


0 0
原创粉丝点击