`

使用反射技术调用对象的方法,得到属性,方法等信息

阅读更多

package com.mengya.test;

 

import java.util.Date;

public class User {

    private int id;

    private String name;

    private Date birthday;

    private float money;

 

    public User() {

 

    }

 

    public User(String name) {

       this.name = name;

    }

 

    public User(float money) {

       this.money = money;

    }

 

    public void showName() {

       System.out.println(this.name);

    }

 

    @Override

    public String toString() {

       return "id=" + this.id + " name=" + this.name + " birthday="

              + this.birthday + " money=" + this.money;

    }

 

    private void test() {

 

    }

 

    public int getId() {

       return id;

    }

 

    public void setId(Integer id) {

       this.id = id;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public Date getBirthday() {

       return birthday;

    }

 

    public void setBirthday(Date birthday) {

       this.birthday = birthday;

    }

   

    public void setBirthday(java.sql.Date birthday) {

       this.birthday = birthday;

    }

 

    public float getMoney() {

       return money;

    }

 

    public void setMoney(Float money) {

       this.money = money;

    }

}

 

测试:

public class ReflectTest {

    public static void main(String[] args) throws Exception {

       Class clazz = User.class;

       Object obj = create(clazz);

       System.out.println(obj);

      

       System.out.println("---------");

       invoke1(obj, "showName");

 

       System.out.println("---------");

       field(clazz);

    }

    //通过Class构造对象

    static Object create(Class clazz) throws Exception {

       Constructor con = clazz.getConstructor(String.class);

       Object obj = con.newInstance("test name");

       return obj;

    }

    //根据方法名称,调用对象的方法

    static void invoke1(Object obj, String methodName)

           throws IllegalArgumentException, IllegalAccessException,

           InvocationTargetException, Exception, NoSuchMethodException {

       //Method是一个对象在java.lang.reflect.Method,包含有方法的信息

       Method[] ms = obj.getClass().getDeclaredMethods();

       //得到对象自己的方法包括Privete方法,但不放包括父类的方法

       ms = obj.getClass().getMethods();

       //得到对象所有public方法,也包括来自父类的方法.通常用个

      

       for (Method m : ms) {//循环遍历对象中的所有方法

           // System.out.println(m.getName());//得到所有方法名称

           if (methodName.equals(m.getName()))

              m.invoke(obj, null);//调用方法名为参数中methodName值的方法,该方法(所找到的那个方法)没有参数

       }

 

       Method m = obj.getClass().getMethod(methodName, null);//这样是根据方法名称和方法参数去要找特定的方法.null表示该方法没有参数

       //obj.getClass().getMethod(methodName,String.class);//这样是根据方法名称和方法参数去要找特定的方法.该方法的参数为String

       m.invoke(obj, null);//调用obj对象的这个方法

    }

    //得到对象的属性

    static void field(Class clazz) throws Exception {

       Field[] fs = clazz.getDeclaredFields();//所有属性都能得到,包括private属性也能得到

       //fs = clazz.getFields();//public属性能得到

       for (Field f : fs)

           System.out.println(f.getName());//输出所属性的名字

    }

    //得到对象中的Annotation:@Override

    static void annon(Class clazz) throws Exception {

       Annotation[] as = clazz.getAnnotations();

       for(Annotation an : as){

           System.out.println(an.toString());

       }

    }

}

 

分享到:
评论

相关推荐

    frida反射调用对象中的方法与字段.pdf

    该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)。感兴趣的朋友可以下载下来看看,了解了解

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    通过反射调用对象的方法和访问对象的字段。 根据类的信息进行序列化和反序列化操作。 实现动态代理和AOP(面向切面编程)等高级特性。 掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所...

    Java反射机制,通过对象访问调用类的私有成员或方法

    Java反射机制,万物皆对象,class也是一个类的对象,通过类类型,反射获得类的成员属性,构造方法,成员方法,并调用类中的方法,也可以调用私有方法。

    基础深化和提高-java反射技术

    Java反射技术指的是在运行时动态地获取类的信息、调用对象的方法、操作类的属性等能力。通过反射,程序可以在运行时检查类、实例化对象、调用方法、获取和设置属性,甚至可以动态修改类的结构。 Java反射技术的核心...

    在VB.net中,利用反射,获得项目中所有公用对象的属性、方法、事件等

    近日,想整理下我自己的vb.net应用程序中,自己定义的类、控件、窗体等对象,希望能够获得它们的“属性”、“字段”、“方法”、“事件”等名称。查阅了“反射”(Reflection)相关资料,写了以下一段代码,分享给...

    .NET/C#利用反射调用含ref或out参数的方法示例代码

    使用反射,我们可以很容易地在运行时调用一些编译时无法确定的属性、方法等。在.NET中的反射可以实现从对象的外部来了解对象(或程序集)内部结构的功能,哪怕你不知道这个对象(或程序集)是个什么东西,另外.NET中...

    dotNet程序另类注册机--反射技术初探

    “反射(Reflection)是.NET中的一个重要技术,通过反射,可以在运行时获得某个类型的各种信息,包括方法、属性、事件及构造函数等,还可以获得每个成员的名称、限定符和参数等信息。可以说有了反射,即可对每个类型...

    C#反射简单入门实例

    创建一个Assembly,反射构造函数,方法,属性信息,动态实例化类对象,调用类方法。对想简单了解反射概念的朋友有一定的帮助。

    java中的反射(详解)

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的...

    java反射知识点

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射...

    详解Golang利用反射reflect动态调用方法

    Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 多插一句,Golang的gRPC也是通过反射实现的。 Golang的官方包 reflect ...

    java反射使用

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的...

    Java基础[08-反射].ppt

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型...

    Java通过反射机制动态设置对象属性值的方法

    下面小编就为大家带来一篇Java通过反射机制动态设置对象属性值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    37.Java的反射.md

    Java反射反射机制,通过反射,在不修改源代码的情况下实现对类的操作。JAVA反射机制是在运行状态中...这种动态获取信息以及动态调用对象方法(**方法名.invoke(类对象),类似于p.eat()**)的功能称为java语言的反射机制。

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。 Class 类与 java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了 Field,Method,Constructor 类 (每个类都实现了 ...

    java反射机制

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的...

    Java反射机制

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的...

    编写Student类,类中包含学生姓名,学号等私有数据成员。使用JAVA反射机制修改一个学生对象的私有数据成员

    编写Student类,类中包含学生姓名,学号等私有数据成员。 使用JAVA反射机制修改一个学生对象的私有数据成员(不允许调用setters)

    Java反射机制的工作原理详解.docx

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的...

Global site tag (gtag.js) - Google Analytics