zoukankan      html  css  js  c++  java
  • Java反射机制

    Java反射机制

    一、定义

           指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

            对于任意一个对象,都能调用它的任意一个方法;

            这种动态获取信息以及动态调用对象方法的功能叫Java语言的反射机制。

    二、应用

            1、生成动态代理;

             2、面向切片编程(在调用方法的前后各加栈帧)。

    三、优点与缺点

           静态编译:在编译时确定类型,绑定对象,即通过。 
           动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 
           反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。

           反射机制的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

    四、常用方法

      (1)获得构造函数的方法 

        Constructor getConstructor(Class[] params)//根据指定参数获得public构造器

        Constructor[] getConstructors()//获得public的所有构造器

        Constructor getDeclaredConstructor(Class[] params)//根据指定参数获得public和非public的构造器

        Constructor[] getDeclaredConstructors()//获得public的所有构造器 
      (2)获得类方法的方法 
        Method getMethod(String name, Class[] params),根据方法名,参数类型获得方法

        Method[] getMethods()//获得所有的public方法

        Method getDeclaredMethod(String name, Class[] params)//根据方法名和参数类型,获得public和非public的方法

        Method[] getDeclaredMethods()//获得所以的public和非public方法 
     (3)获得类中属性的方法 
        Field getField(String name)//根据变量名得到相应的public变量

        Field[] getFields()//获得类中所以public的方法

        Field getDeclaredField(String name)//根据方法名获得public和非public变量

        Field[] getDeclaredFields()//获得类中所有的public和非public方法 

    五、获取Class类

    Person p1 = new Person();
    //下面的这三种方式都可以得到字节码
    CLass c1 = Date.class();
    p1.getClass(); 
    //若存在则加载,否则新建,往往使用第三种,类的名字在写源程序时不需要知道,到运行时再传递过来
    Class.forName("java.lang.String");

      

  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/zfc-java/p/7536132.html
Copyright © 2011-2022 走看看