zoukankan      html  css  js  c++  java
  • 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:红色

  • 相关阅读:
    取石子(五)(FIB博弈)
    NYOJ-161-取石子 (四)(Wythoff 博弈)
    memcached简介
    RSA---应用最广泛的非对称加密算法
    分区
    按子组收集数据
    多级分组
    归约和汇总
    收集器Collectors
    由函数生成流---创建无限流:Stream.iterate和Stream.generate
  • 原文地址:https://www.cnblogs.com/shuoli/p/7306729.html
Copyright © 2011-2022 走看看