`
zhongzhihua
  • 浏览: 313215 次
  • 来自: ...
社区版块
存档分类
最新评论

java反射--如何改变private中的变量的值

    博客分类:
  • java
阅读更多

class DemoTest{

   private String name="123";

   public getName(){

       system.out.println("public getName " + name);

       return name;

   }

   private getName2(){

       system.out.println("private getName2 " + name);

      return name;

   }

}

 

如这个,要改变name的值。如何改变。通过java反射如何改变

 

先来看看如何用反射来调用getName方法

class<DemoTest> calzz=DemoTest.class;

Constructor cons=clazz.getConstructor(new class[]{});//这个是得到class对象的构造方法。参数为构造方法的参数的类的对象。

如:DemoTest有一个构造方法为public DemoTest(String arg0,String arg1){......}

这时,Constructor cons=clazz.getConstructor(new class[]{String.class,String.class});两个String.calss分别对应arg0,arg1.

接下来是:

DemoTest test=(DemoTest)cons.newInstance(new Object[]{});//生成相应的对象。参数new Object[]{} 就是构造方法对应的参数的具体值。如刚才的:

DemoTest test=(DemoTest)cons.newInstance(new Object[]{“李车”,"张三"});

接下来:

Method method=clazz.getMethod("getName",new Class[]{String.class});

method.invoke(test,new Object[]{"王五"});

这时就可以打印出王五了。

 

那要如何把name为private 的值进行改变呢。

1。先得到field,

Field field=clazz.getDeclaredField("name");

2.将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。

field.setAccessible(true);

3.对变量值进行修改

field.set("name","王五");

 

OK;

 

要访问私有的方法也是一样。

 

Method method=clazz.getDeclaredMethod("getName2");

method.setAccessible(true);

method.invoke(test,new Object[]{"王五"});

 

 

OK!

0
0
分享到:
评论
1 楼 dyfh 2015-01-09  
不知是否与jdk的版本有关,但在jdk1.6里,
3.对变量值进行修改
field.set("name","王五");
此处应为
field.set(clazz,"王五");

相关推荐

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

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

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

    标题“Java反射机制修改私有成员变量的实现_Reflection”着重讲述了如何利用反射来修改私有成员变量的值。在Java中,私有成员变量通常被视为封装的一部分,不被外部类直接访问。然而,通过反射,我们可以绕过这种...

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

    但通过反射,我们可以突破这种限制,实现对private变量和方法的操作。 首先,我们需要理解Java反射的基本步骤: 1. 获取Class对象:`Class&lt;?&gt; clazz = DemoTest.class;` 这里`DemoTest.class`是通过类名直接获取...

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

    654.652.JAVA基础教程_反射-获取运行时类的父类及父类的泛型(654).rar

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部属性、方法和实现。...希望这个教程能帮助你进一步了解Java反射,为你在编程旅程中打开新的可能性。

    java反射操作父类所有属性和方法

    ### Java反射操作父类所有属性和方法 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。通过反射,我们可以获取类的字段、...

    java学习资料-反射机制深入理解剖析

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这个特性使得Java具有高度的灵活性和强大的功能,尤其是在开发框架、插件系统以及元数据处理等方面有着广泛的...

    java 反射 报错 no such method exception

    ### Java反射机制与NoSuchMethodException详解 在Java编程中,反射是一种强大的机制,允许程序在运行时检查和修改自身结构和行为。然而,当开发者尝试使用反射调用一个不存在的方法时,便会遇到`java.lang....

    java jdk-api-1.6 中文 chmd

    javax.security.auth.x500 此包包含应该用来在 Subject 中存储 X500 Principal 和 X500 Private Crendentials 的类。 javax.security.cert 为公钥证书提供类。 javax.security.sasl 包含用于支持 SASL 的类和接口...

    Java基础-经典入门教程

    8. **数组**:数组是相同类型数据的集合,可以在一个变量中存储多个值。Java支持一维、二维及多维数组。 9. **类与对象**:面向对象编程的基础是类和对象。类是对象的模板,包含属性(成员变量)和行为(方法)。...

    Java语言-自学手册完全版

    - **Java环境搭建**:指导读者如何安装JDK(Java Development Kit),配置环境变量,并介绍常用的集成开发环境(IDE)如Eclipse或IntelliJ IDEA。 #### 2. Java基础语法 - **数据类型**:讲解Java中的基本数据类型...

    java 反射机制

    ### Java反射机制深入理解 #### 一、反射机制概述 Java反射机制是一种强大的工具,它允许程序在运行时检查和操作任何类、方法、构造函数和字段等元素。这种能力对于构建灵活的应用程序和框架非常有用,特别是那些...

    java反射详解

    ### Java反射机制详解 #### 一、引言 Java反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地访问类的信息,并能够直接操作这些类的对象。这种能力对于许多开发框架(如Spring)来说至关重要,因为...

    JAVA2 反射技术 pdf

    本文将详细介绍Java反射技术的核心概念及其应用。 #### 核心概念 1. **Class类**:Java反射的基础类是`Class`,每个类都对应一个`Class`实例。可以通过多种方式获取`Class`对象,例如使用类名直接获取(`MyClass....

    cccctyl-java-basic-notes-master_java_

    在Java编程中,权限设置通常涉及到访问控制修饰符(如public, private, protected)以及类、方法和变量的可见性。正确地设置权限能防止未授权的访问,保护代码的内部实现细节,并维护程序的封装性。此外,描述中的...

    JavaNote-main

    以上只是JavaNote-main可能涉及的部分内容,实际压缩包可能还包含更多如设计模式、数据库连接、JVM优化、反射、注解等进阶主题。学习Java时,理解并实践这些知识点将有助于成为一名熟练的Java开发者。

    JAVA基础--复习笔记.pdf

    类是Java中的蓝图,它定义了对象的属性(变量)和行为(方法)。对象是类的实例,可以调用类中定义的方法和访问其变量。Java使用`public`、`private`、`protected`等访问修饰符控制成员的可见性。 5. **封装、继承...

    候捷谈Java反射机制

    Java反射机制是一种强大的运行时功能,使得Java能够在程序执行过程中动态地获取类的信息并操纵类的对象。这一特性极大地扩展了Java语言的能力,使其更加灵活多变。下面将详细介绍Java反射机制的主要功能及其应用场景...

Global site tag (gtag.js) - Google Analytics