黑马程序员技术交流社区
标题: 反射指定类中的方法 [打印本页]
作者: 星辉祝愿 时间: 2015-6-2 12:18
标题: 反射指定类中的方法
反射指定类中的方法:
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即可!
- 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;
- }
-
- }
复制代码
运行结果:
public int javaenhance.Person.getAge()
public void javaenhance.Person.setAge(int)
public java.lang.String javaenhance.Person.sayHello(int,java.lang.String)
private void javaenhance.Person.myPrivate()
public java.lang.String javaenhance.Person.toString()
public java.lang.String javaenhance.Person.getName()
public void javaenhance.Person.setName(java.lang.String)
获取类中所有的方法
My name is Love,39years old ,nice to meet you
获取指定方法
10000
反射静态方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |