首页 > 编程语言 >Java反射设置可以访问私有成员

Java反射设置可以访问私有成员

时间:2022-10-21 14:34:05浏览次数:48  
标签:反射 Java String 私有 void sex User public name

定义一个测试类

public class User {

    private String name = "ppp";
    private String sex;
    private int age;

    private void eat(String num){
        System.out.println("我在"+this.name+"sadasd"+num);
    }

    public void drink(String witer){
        System.out.println("我正在喝"+witer);
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex;
    }
}

使用反射使能访问私有属性

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

public class FanShe {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        //获取类对象
        Class user = Class.forName("Demo01_static.User");
        //获取实例
//        User o =(User)user.newInstance();
        User o = new User();

        //获取类中的方法
        Method eat = user.getDeclaredMethod("eat",String.class);
        //获取类中的属性
        Field name = user.getDeclaredField("name");

        //设置私有属性使其可以更改
        name.setAccessible(true);
        System.out.println(name.get(o));
        name.set(o,"kkkk");
        System.out.println(name.get(o));

        //设置私有方法使其可以修改
        eat.setAccessible(true);
        eat.invoke(o,"16");


    }

}

标签:反射,Java,String,私有,void,sex,User,public,name
From: https://www.cnblogs.com/java-six/p/16813336.html

相关文章

  • Java关键字(三)——static
    我们说Java是一种面向对象编程的语言,而对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,对同类对象抽象出其共性,便是Java中的类,我们可以用类描述世间万物......
  • NodeJS & Dapr Javascript SDK 官方使用指南
    Dapr是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框......
  • Java一个还不错的日期格式转换工具类(附源码)
    Java工具类pom依赖<commons-lang3.version>3.3.2</commons-lang3.version><dependency><groupId>org.apache.commons</groupId......
  • 【JavaWeb】 Mybatis-02-Mybatis的快速入门
    @[Toc]写在前言mybatis里面的配置文件是如何联系的这是我第二次学习mybatis的理解,我理解的和如下图,config包含了数据库的配置,以及mappers,通过mappers可以找到各类Mapper,这样......
  • 【JavaWeb】 Mybatis-03-Mybatis代理开发
    @[Toc]Mybatis代理1、为什么使用Mybatis代理?Mybatis开发者给了用户两个配置的方式,一个是如我们​​JavaWebMybatis-02-Mybatis的快速入门​​里的那样单纯使用XML配置,另外......
  • Java多线程实现的四种方式
    实现多线程有以下四种方式实现多线程有以下四种方式:1.继承Thread类2.实现Runnable接口3.实现Callable接口4.线程池:提供了一个线程队列,队列中保存着所有等待状态的线程......
  • java----util常用类,1字符串转日期,2格式化类Format,3Random,4MD5,5Base64
    util常用类1.字符串转日期1.1Date/CalendarStringdateStr="2020-01-0110:00:00";jdk1.8之前与时间日期相关的类型有2个 java.util.Date  java.util.Calen......
  • Java语言深入:深入研究Java equals方法,equals,==,equals用法
    网上关于equals和==的区别的讨论巨多这里先简单分析下他们的区别吧:equals方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等......
  • Java 多线程编程之八:多线程的调度
        本博客是“Java多线程编程”系列的后续篇。“Java多线程编程”系列其他博客请参阅本博客结尾部分。    有多个线程,如何控制......
  • 设计模式之一:Java中的简单工厂模式
    Java中的简单工厂模式简单工厂模式(SimpleFactoryPattern),又称静态工厂模式(StaticFactoryPattern)。举两个例子以快速明白Java中的简单工厂模式:女娲抟土造人话说:“......