`
yun70345
  • 浏览: 5069 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

通过反射可以访问私有变量、方法

F# 
阅读更多
今天学习RTTI的时候,发现通过反射可以访问私有方法、也可以改变私有变量的值,这样来说的话private 是不是基本没有意义了啊?!
public class User {

    private String name;
    private int age=25;
    public String sex;
    

    private String getName(){
        System.out.println("进来获得名字的方法了");
        return "yun70345";
    }
    public String getSex(){
        return "man";
    }
}



测试类如下:
public class TestMain {

    public static Object acessPrivateMethod(Object o,String methodName) throws Exception{
       /*获得所有的方法
        Method []Methods=o.getClass().getDeclaredMethods();
        for (Method method : Methods) {
            System.out.println(method.getName());
        }
        */
        //获得所有属性名字
        Field []fields=o.getClass().getDeclaredFields();
        for (Field f : fields) {
            System.out.println(f.getName());
            if(f.getName().equals("age")){
                f.setAccessible(true);
                f.set(o, 24);//改变私有变量age的值
                System.out.println(f.get(o));
            }
        }
         
        Method m=o.getClass().getDeclaredMethod(methodName);
        m.setAccessible(true);
       return  m.invoke(o);
    }
    
    public static void main(String[]args) throws Exception{
        User u=User.class.newInstance();
        String sex=u.getSex();
        System.out.println("性别:"+sex);
        System.err.println("使用反射访问私有方法:");
        String s=(String) acessPrivateMethod(u,"getName");
        System.out.println("名字:"+s);
    }
}
分享到:
评论

相关推荐

    C#net反射实现访问类中的私有变量或者方法

    在本篇文章中,我们将深入探讨如何利用C#中的反射机制来访问类中的私有变量或方法。通过一个具体的示例代码,我们将详细了解反射的基本概念、使用场景以及如何具体操作。 ### 一、C#反射机制简介 #### 1.1 什么是...

    Java反射访问私有变量和私有方法.doc

    Java 反射访问私有变量和私有方法 Java 反射机制是 Java 语言中的一种强大的工具,使得我们可以在运行时装配代码,而无需在对象之间进行源代码链接,从而使代码更具灵活性。在实际测试中,我们经常需要访问类的非...

    java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class

    提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/...

    反射修改私有成员变量例子

    反射机制提供了一种方式来在运行时检查类的成员变量、方法和构造函数,并且可以在运行时修改它们的行为。 为什么需要 Java 反射机制? Java 反射机制可以帮助我们解决一些特殊的问题,例如: * 动态修改类的成员...

    java 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class

    提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...

    Java反射机制修改私有成员变量的实现_Reflection

    在Java中,反射机制主要用于以下几种情况:动态加载类、访问私有成员、运行时检查类型以及调用私有方法等。 标题“Java反射机制修改私有成员变量的实现_Reflection”着重讲述了如何利用反射来修改私有成员变量的值...

    Java对类私有变量的暴力反射技术讲解

    在实际开发中,暴力反射技术可以用于很多场景,例如在测试中,我们可以使用反射机制来访问和修改私有变量,以便于测试私有方法或私有变量的行为。在框架中,我们可以使用反射机制来实现依赖注入,自动装配等功能。 ...

    C++访问类中私有成员变量的方法

    原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,还有是是通过友元访问。但是!但如果没有get、set方法都没有提供,也没有定义友元,比如使用...

    java 利用反射获取内部类静态成员变量的值操作.docx

    2. **静态成员变量**:静态成员变量是类级别的变量,可以通过类名直接访问,不需要创建类的实例。 3. **反射**:反射是在运行时检查类、接口、字段和方法等的能力,通常用于实现动态代理或需要动态加载类的场景。 #...

    c# 变量反射使用赋值

    此外,反射可以访问私有和受保护的成员,这可能导致安全问题,所以使用时需谨慎。 在实际项目中,尤其是在WPF应用中,反射常用于动态数据绑定、插件机制、序列化/反序列化、单元测试等场景。结合依赖注入和面向接口...

    反射高手巧妙实现强行私有成员源代码,java跨域范围

    通过反射,开发者可以访问通常被限制的私有成员,包括私有变量和私有方法,这在特定场景下如测试、调试或框架设计中非常有用。本文将深入探讨如何巧妙地利用反射来实现对私有成员的强制访问,并以`HackUtils.java`...

    java使用反射访问成员变量的值示例

    getDeclaredField()是Field类中的一个方法,它能够获取类中声明的所有成员变量,包括公有、保护、默认(包)访问和私有变量,但是不能获取继承来的成员变量。通过传入成员变量的名字,就能够得到相应的Field对象。在...

    JAVA反射机制的入门代码

    3. **访问字段**:通过`Class`对象的`getFields()`或`getDeclaredFields()`方法获取所有公共或私有字段,然后使用`Field`对象的`get()`或`set()`方法读取或修改对象的字段值。 4. **调用方法**:使用`Class`对象的`...

    Java反射获取私有构造函数、属性、方法

    但是,通过 Java 反射机制,我们可以突破这种限制,获取并操作私有构造函数、属性、方法。 Java 反射机制获取私有构造函数的原理是通过获取类的 Constructor 对象,然后调用其 newInstance 方法来创建类的实例。...

    android系统java反射机制详解

    在Android系统中,Java反射机制同样被广泛应用,尤其是在动态加载类、处理不确定类型的对象、调用私有方法或者访问私有变量等方面。下面将深入探讨Java反射机制的概念、原理及在Android开发中的应用。 一、Java反射...

    用反射的方式获取父类中的所有属性和方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部结构,包括类的属性、方法以及构造器。...通过上述步骤,你可以有效地利用反射获取和操作类的父类属性和方法。

    利用反射给属性赋值

    3. 访问私有成员:可以通过反射访问类的私有字段和方法。 4. 自动化测试:测试框架常使用反射来模拟各种输入和验证输出。 5. 框架设计:许多高级框架如Spring,Hibernate等都利用反射来实现依赖注入和元数据驱动的...

    java反射_改变private中的变量及方法的简单实例

    在上述示例中,我们看到了如何通过反射改变私有变量`name`的值以及调用私有方法`getName2`。这些操作在常规编程中是不允许的,但通过反射,我们可以在特定情况下实现这样的需求。然而,使用反射时务必谨慎,避免滥用...

    pdf反射机制-java

    5. 测试:在单元测试中,反射可以用于访问私有方法和属性,以便进行全面的测试。 6. 序列化和反序列化:如JSON库Gson和Jackson使用反射将Java对象转换为JSON字符串,反之亦然。 7. 自动化工具:如Apache POI库使用...

    java反射机制案例及源码

    通过反射,我们可以实现一些高级功能,如动态加载类、创建对象、调用私有方法以及访问私有变量等。 首先,让我们了解如何获取`Class`对象。有两种主要方式:一是通过`Class.forName()`方法,传入类的全名(包括包名...

Global site tag (gtag.js) - Google Analytics