• JAVA反射机制的小记


    本文摘自《Spring 3.x 企业应用开发实战》

    Java还为包提供了Package反射类,在JDK 5.0中还为注解提供了AnnotatedElement反射类。总之,Java的反射体系保证了可以通过程序化的方式访问目标类中所有的元素,对于private或protected的成员变量和方法,只要JVM的安全机制允许,也可以通过反射进行调用。例子如下。

    package com.baobaotao.reflect;
    public class PrivateCar {
           //①private成员变量:使用传统的类实例调用方式,只能在本类中访问
       private String color; 
            //②protected方法:使用传统的类实例调用方式,只能在子类和本包中访问
       protected void drive(){
    	   
    System.out.println("drive private car! the color is:"+color);
       }
    }
    
    public class PrivateCarReflect {
       public static void main(String[] args) throws Throwable{
    	   ClassLoader loader = Thread.currentThread().getContextClassLoader();
    	   Class clazz = loader.loadClass("com.baobaotao.reflect.PrivateCar");
    	   PrivateCar pcar = (PrivateCar)clazz.newInstance();
    	   
    	   Field colorFld = clazz.getDeclaredField("color");
            //①取消Java语言访问检查以访问private变量
    	   colorFld.setAccessible(true); 
    	   colorFld.set(pcar,"红色");
    	   
    	   Method driveMtd = clazz.getDeclaredMethod("drive",(Class[])null);
            //Method driveMtd = clazz.getDeclaredMethod("drive"); JDK5.0下使用
           
            //②取消Java语言访问检查以访问protected方法
    	   driveMtd.setAccessible(true); 
            driveMtd.invoke(pcar,(Object[])null);
      }
    }
    

    运行该类,打印出以下信息:

    drive private car! the color is:红色

  • 相关阅读:
    使用 Redis 实现排行榜功能
    php sprintf函数
    phpcms v9文章页调用点击量方法
    redis 高级配置
    mysql 子查询优化
    mysql 优化
    Centos 7 安装Anaconda3
    磁盘调度算法
    pycharm设置python文件颜色
    C++禁止使用拷贝构造函数和赋值运算符方法
  • 原文地址:https://www.cnblogs.com/shuoli/p/7306729.html
Copyright © 2020-2023  润新知