`

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

阅读更多

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

    4. 执行脚本,动态地反射调用对象中的方法和打印对象的字段。 通过这种技术,我们可以在不直接修改应用代码的情况下,对应用进行操作。这对于逆向工程和安全测试来说,是非常有用的技术。然而,必须注意的是,这种...

    反射获取属性调用方法反射获取属性调用方法

    在Java或.NET编程环境中,反射是一种强大的工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。反射获取属性和调用方法是其核心功能,广泛应用于框架设计、动态代理、插件机制等领域。下面将详细解释这...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    3. **设置访问权限**:由于私有方法默认是不可访问的,所以我们需要通过`setAccessible(true)`方法来改变其访问权限,允许反射调用。`privateMethod.setAccessible(true);` 4. **调用私有方法**:现在我们可以调用...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    反射动态调用DLL方法,含参数

    反射是.NET框架提供的一种机制,它允许在运行时检查类型信息,包括类、接口、枚举、属性、方法等。通过System.Reflection命名空间中的类,如Assembly、Type、MethodInfo、ConstructorInfo等,我们可以动态地创建对象...

    Java 反射详解(包含私有方法属性的调用)

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...

    c# 反射调用对象成员 !

    本教程将深入探讨如何使用C#的反射来调用对象成员,这对于编写灵活和高度自适应的代码至关重要。 首先,我们需要了解`System.Reflection`命名空间,它是C#反射的核心。在这个命名空间中,`Type`类代表了.NET框架中...

    Java 反射创建get set方法及反射方法的调用

    本文介绍了如何使用Java反射机制来创建get和set方法,并通过反射调用这些方法来访问对象的属性。这种方式虽然灵活,但在实际开发中应当谨慎使用,因为它可能会降低代码的性能和可维护性。了解反射机制的基本原理对于...

    java 反射入门-属性方法调用实例

    在Java中,反射主要用于在运行时分析类和对象,包括类的方法、字段、构造器等信息。这篇博文将带你入门Java反射,并通过属性和方法的调用来实践这一概念。 首先,理解反射的基础概念。在Java中,`Class`类代表了...

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

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

    利用反射机制动态获取对象属性名称及数据类型

    在ASP.NET的网页(如Default.aspx)中,我们可以创建一个`Student`实例,并调用`ReflectorClass.getPropertyName`方法来获取并显示`Student`对象的属性信息: ```aspx <!DOCTYPE html> 反射示例 ...

    java反射,获取所有属性、方法以及List集合类

    在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类信息等。本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解...

    C#,利用反射动态创建对象

    通过反射,我们可以操作程序集、类型、接口、属性、方法等,从而增加了代码的灵活性和可扩展性。本篇文章将深入探讨如何利用反射在C#中动态创建对象。 1. **反射基础** 反射是.NET框架提供的一种特性,通过System....

    java反射获取所有属性,获取所有get方法,包括子类父类

    在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细...

    反射,动态加载指定类调用类中的方法

    反射机制使得我们能够在运行时动态地获取类的信息,并且能够创建对象、调用方法、访问字段,甚至改变类的行为。在Java中,`java.lang.reflect`包提供了对反射的支持。 在“反射,动态加载指定类调用类中的方法”这...

    反射实例反射调用DLL里的方法

    在实际应用中,反射调用DLL里的方法可能涉及到更复杂的逻辑,比如处理泛型方法、静态方法、私有方法等。同时,需要注意性能问题,因为反射操作相比直接调用通常会慢一些,所以不应在性能敏感的代码中过度使用。 总...

    ActiveX反射集成,方法事件调用.rar

    在ActiveX中,开发者可以使用反射来获取关于控件的信息,如其接口、方法和属性,甚至在没有编译时信息的情况下调用这些方法。这对于实现动态绑定和自适应的代码非常有用。 方法调用是编程中的基本操作,但在ActiveX...

    C#实现反射调用动态加载的DLL文件中的方法

    ### C#中使用反射调用动态加载的DLL文件中的方法 #### 反射的作用与应用场景 反射是.NET框架中的一项重要技术,它允许程序在运行时动态地获取自身的元数据(如类、方法、属性等)并进行操作。具体而言,反射主要有...

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

    这一机制的核心在于,Java程序可以获取到关于任何类的内部信息,包括类名、属性、方法、构造器等,并能在运行时创建和调用对象。这种能力使得Java具有了很高的灵活性和可扩展性,尤其是在处理动态加载类、框架设计...

Global site tag (gtag.js) - Google Analytics