通过Reflection来获得方法和信息

package liangxi;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassDemo3 {
//打印类的信息,包括类的成员函数、成员变量
// obj 该对象所属的信息
public static void printClassMethodMessage(Object obj){
//要获取类的信息 首先要获取类的类类型
Class c = obj.getClass();//传递的是那个子类的对象 c就是该子类的类类型
//获取类的名称
System.out.println("类的名称是:"+c.getName());
Method[]ms = c.getMethods();//c.getDeclaredMethod()
//Method 类,方法对象
//一个成员方法就是一个Method对象
//getMethod()方法获取的是所有的public 的函数,包括父类继承而来的
//getDeclaredMethod()获取的是所有该类自己声明 的方法,不问访问权限
for(int i = 0; i<ms.length;i++){
//得到方法的返回值类型的类类型
Class returnType = ms[i].getReturnType();
System.out.print(ms[i].getName());
//得到方法的名称
System.out.print(ms[i].getName()+"(");
//获取参数类型 -->得到的是参数列表的类型的类类型
Class[] paramTypes = ms[i].getParameterTypes();
for(Class class1 : paramTypes ){
System.out.print(class1.getName()+",");
}
System.out.println(")");
printFieldMessage(c);
}

}

public static void printFieldMessage(Object obj) {
Class c =obj.getClass();

//成员变量也是对象
//java.lang.reflect.Field
//Field类封装了关于成员变量的操作
//getFields()方法获取的是所以的public的成员变量的信息
//getDeclaredFields获取的是该类自己声明的成员变量的信息
//Field[]fs=c.getFields();
Field[] fs = c.getDeclaredFields();
for(Field field :fs){
//得到成员变量的类型的类类型
Class typeName = field.getType();
String fieldName = field.getName();
System.out.println(typeName+""+fieldName);
}
}
public static void printConMessage(Object obj){
Class c = obj.getClass();
//java.lang.Constructor中封装了构造函数的信息
//构造函数也是对象
//Constructor[] cs = c.getConstructors();
Constructor[]cs = c.getDeclaredConstructors();
for(Constructor constructor:cs){
System.out.print(constructor.getName()+"(");
//获取构造函数的参数列表
Class[]paramTypes = constructor.getParameterTypes();
for(Class class1:paramTypes){
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}

}

测试

package liangxi;

import java.lang.reflect.Field;

public class ClassDemo33 {
public static void main(String[] args) {
String s = "hello";
ClassDemo3.printClassMethodMessage(s);

Integer n1 = 1;

ClassDemo3.printClassMethodMessage(n1);
//通过class类来获得类的所以方法信息 返回所以Integer类的信息
//成员变量也是对象
//java.lang.reflect.Field
//Field类封装了关于成员变量的操作

}
}

输出结果就是Reflection出来的所有的方法和信息

时间: 2024-10-02 07:39:40

通过Reflection来获得方法和信息的相关文章

phpstorm设置方法头信息备注

一.目标,如下图,希望在方法上增加如下头信息备注 二.设置live template: 三.增加方法头信息备注,如下所示: * created by ${USER} at ${DATE} ${TIME} 原文地址:https://www.cnblogs.com/zhengchuzhou/p/9986159.html

3DsMax导出插件编写(二)——常规SDK方法进行信息获取和保存文件

之前已经把配置vs和maxSdk的方法介绍过了,如果不懂怎样配置的朋友请参考: http://liweizhaolili.blog.163.com/blog/static/162307442013117731953/ 下面来介绍一下导出插件的具体写法.不过这不是一个容易说的很详细的问题.因为我们要写导出插件,通常都是因为想根据自己想要的信息来导出,所以就算我把我整个工程都公开,意义也不大的,因为那是根据我自己需要的数据写的业务,估计不太可能和你想要的一样的.所以我也只能简单的说明一些几个关键获取

IntelliJ IDEA悬停鼠标显示方法详细信息

1.如果View -> Toolbar勾选情况下, 直接点击按钮打开设置, 或是直接点击File -> Settings(或是快捷键)打开设置窗口. 2.搜索栏中输入Show quick documentation on mouse move 就搜索出来了 或是在Editor -> General -> Other中都可以看到查看快捷键 3.选中要查看的方法名 点击快捷键ctrl+q 原文地址:https://www.cnblogs.com/wangcp-2014/p/113143

php反射方法信息

<?phpclass ReflectionFunction implements Reflector{    final private __clone()    public object __construct(string name)    public string __toString()    public static string export()    //导出该函数的详细信息    public string getName()    //取得函数名    public bo

AspectJ获取方法注解的信息

在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> clazz) { MethodSignature methodSignature = (MethodSignature) joinP

Java Reflection(五):方法

转载自并发编程网 – ifeve.com 内容索引获取Method对象方法参数以及返回类型通过Method对象调用方法 使用Java反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,通过使用java.lang.reflect.Method类就可以实现上述功能.在本节会带你深入了解Method对象的信息. 获取Method对象 可以通过Class对象获取Method对象,如下例: Class aClass = ...//获取Class对象 Method[] methods = aCla

JAVA深入研究——Method的Invoke方法。

在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错.虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码. Method的invoke方法 1.先检查 AccessibleObject的override属性是否为true. Accessibl

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

JAVA深入研究——Method的Invoke方法

http://www.cnblogs.com/onlywujun/p/3519037.html 在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码. Method的invoke方法 1.先检查 AccessibleObject的override属性是否为true. AccessibleObject是Met