zoukankan      html  css  js  c++  java
  • Java反射机制学习与研究

    Java反射机制:可以获取正在运行时的Java对象。

    1、判断运行时对象对象所属的类。

    2、判断运行时对象所具有的成员变量和方法。

    3、还可以调用到private方法,改变private变量的值。

    Step:

    0.得到运行时Java对象 1.得到Class对象  2.Field (变量) 3.Method(方法)

    例如:

    现有一类:

    PrivateClass.Java

    package lzh.location.dingwei;

    import android.util.Log;

    public class PrivateClass {
    private String string_field;

    private void T1(String string) {
    Log.i("xxx", string);
    }

    public void T2() {
    Log.i("xxx", string_field);

    }
    }

    先做如下调用:

    Class class1 = Class.forName("lzh.location.dingwei.PrivateClass");
    PrivateClass object = (PrivateClass) class1.newInstance();

    // 改变私有变量的值
    Field field = class1.getDeclaredField("string_field");
    field.setAccessible(true);
    field.set(object, "private value setted by fanshe");
    object.T2();
    // 调用私有方法
    Method method = class1.getDeclaredMethod("T1", new Class[] { String.class });
    method.setAccessible(true);//忽略检查访问权限
    method.invoke(object, new String[] { "private method invoked by fanshe" });

    运行之后的结果如下:

    private value setted by fanshe

    private method invoked by fanshe

  • 相关阅读:
    mysql_fullindex全文索引
    MySQL8.0.12安装主从复制读写分离
    备库不能应用事务&Slave_SQL_Running No
    MySQL8.0.19_Group_Replication分布式集群部署
    MySQL8.0.12_InnoDB_Cluster
    oracle12c备份恢复策略
    CentOS7.X静默安装Oracle12C
    binlog恢复数据
    windows安装多个mysql&Docker安装MySQL5.7
    论自我要求
  • 原文地址:https://www.cnblogs.com/lzh-Linux/p/5000097.html
Copyright © 2011-2022 走看看