利用反射获取Class对象功能的Method
程序员文章站
2022-03-26 16:39:35
1.获取成员方法们Method[] getMethods() Method getMethod(String name,类>…parameterTypes) Method[] getDeclaredMethods() Method getDeclaredMethod(String name,类>…parameterTypes)Person类pack...
Method:方法对象
1.获取成员方法们
- Method[] getMethods()
-
Method getMethod(String name,类<?>…
parameterTypes) - Method[] getDeclaredMethods()
-
Method getDeclaredMethod(String name,类<?>…
parameterTypes)
2.执行方法:
- Object invoke(Object obj,Object… args)
3.获取方法名称:
- String getName: 获取方法名
4.获取类名
- String getName()
Person类
package cn.domain; public class Person { private String name; private int age; public String a; protected String b; String c; private String d; public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } 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; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", a='" + a + '\'' + ", b='" + b + '\'' + ", c='" + c + '\'' + ", d='" + d + '\'' + '}'; } public void eat(){ System.out.println("eat..."); } public void eat(String food){ System.out.println("eat..."+food); } }
测试
package cn.reflect; import cn.domain.Person; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ReflectDemo4 { /**
*Class对象功能:
*获取功能:
1.获取成员变量们
*Field[] getFields()
*Field getField(String name)
*Field[] getDeclaredFields()
*Field getDeclaredField(String name)
2.获取构造方法们
*Constructor<?>[] getConstructors()
*Constructor<T> getConstructor(类<?>... parameterTypes)
*Constructor<?>[] getDeclaredConstructors()
*Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
3.获取成员方法们
*Method[] getMethods()
*Method getMethod(String name,类<?>... parameterTypes)
*Method[] getDeclaredMethods()
*Method getDeclaredMethod(String name,类<?>... parameterTypes)
4.获取类名
*String getName()
*/ public static void main(String[] args) throws Exception { //0.获取Person的Class对象 Class personClass = Person.class; /*
1.获取成员方法们
*Method[] getMethods()
*Method getMethod(String name,类<?>... parameterTypes)
*Method[] getDeclaredMethods()
*Method getDeclaredMethod(String name,类<?>... parameterTypes)
*/ //获取指定名称的方法 Method eat_method = personClass.getMethod("eat"); Person p = new Person(); //执行方法 eat_method.invoke(p); //获取指定名称的方法 Method eat_method2 = personClass.getMethod("eat", String.class); //执行方法 eat_method2.invoke(p,"螺蛳粉"); System.out.println("------------------------------"); //获取所有public修饰的方法 Method[] methods = personClass.getMethods(); for (Method method : methods) { System.out.println(method); //包含Object类的方法 String name = method.getName(); System.out.println(name); // method.setAccessible(true); } //4.获取类名 String getName() String className = personClass.getName(); System.out.println(className); //cn.domain.Person } }
打印结果:
本文地址:https://blog.csdn.net/weiyoo55/article/details/107889971
下一篇: JVM 对象内存分配和对象内存布局