zoukankan      html  css  js  c++  java
  • java反射的原理及使用

    定义

           JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。——百度百科

    原理

    什么是Class对象

        每一个java类都对应着一个Class对象,程序编译阶段Class类对象被变成字节码文件存放于类路径下(即.class文件),当java类第一次被装载时jvm会创建该类的Class对象。Class类对象中包含着该类的全部信息,包括变量、方法等。

    类的加载原理

        jvm启动时,并非一次性将所有能识别的类全部都加载到内存中,实际上类的加载时机是在该类第一次被使用时被加载的。使用一个类时的大致的加载流程如下:

                  类的空间分配:指分配静态常量成员的空间

                  类初始化:对静态常量成员进行初始化及静态代码块的执行,如有超类,先对超类初始化

     1 package TestRefection;
     2 
     3 import org.junit.Test;
     4 
     5 public class ListTest {
     6 
     7     @Test
     8     public void testHelloWorld() {
     9         try {
    10             Class.forName("TestRefection.TestClass1");
    11             Class clazz = TestClass3.class;
    12             new TestClass2();
    13         } catch (ClassNotFoundException e) {
    14             // TODO Auto-generated catch block
    15             e.printStackTrace();
    16         }
    17     }
    18 
    19 }
    20 
    21 class TestClass1 {
    22     static {
    23         System.out.println("=================TestClass1================");
    24     }
    25 }
    26 
    27 class TestClass2 {
    28     static {
    29         System.out.println("=================TestClass2================");
    30     }
    31 }
    32 
    33 class TestClass3 {
    34     static {
    35         System.out.println("=================TestClass3================");
    36     }
    37 }
    38 
    39 -------------------------执行结果-------------------------
    40 =================TestClass1================
    41 =================TestClass2================
    类初始化的验证代码

    获取类的Class对象

    为了在程序运行的过程通过反射对已有类或对象做一些操作,均需要获取Class对象,获取Class对象有以下三种方法:

        • Class.forName(String className); //会触发类的初始化
        • 类名.class //仅执行到创建Class对象,不会触发类的空间分配及初始化
        • 对象名.getClass() //首次创建对象时已完成类的初始化

    Class类与java.lang.reflection类库对反射的支持

    在Java中,Class类与java.lang.reflect类库一起对反射技术进行了全力的支持。其中反射库中Constructor类用于操作构造方法、Method类用于操作方法、Field类用于操作变量。其具体的使用可以见下一章。

    反射技术的使用

      关于反射技术的具体使用,很多书籍和文章都已经有了详细的说明,以下转载一篇反射技术的使用方法的文章,转载地址:

        http://www.cnblogs.com/zhaoyanjun/p/6074887.html

  • 相关阅读:
    一文读懂比特币的软分叉
    区块链的七阶段位,你属于哪一段?
    总价值超26.7亿美元的5个最富有比特币地址汇总
    智能合约的沙箱机制是什么?
    区块链的核心技术是什么?
    区块链和比特币常见的七大误区
    矿机论斤卖?夸大其词
    比特币跌破5000美元的三大影响因素
    微软Azure区块链开发工具包三大功能详解
    各大自媒体平台的收益情况汇总
  • 原文地址:https://www.cnblogs.com/qq455988971/p/8136776.html
Copyright © 2011-2022 走看看