• Java 反射


    在java中,只要给定类的名字,就可以利用反射机制来获得类的信息,类中有什么信息,利用反射机制就能可以获得什么信息,不过前提是得知道类的名字。

    java 反射是 Java 被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifiers( 诸如 public, static 等 )、superclass (例如 Object)、 实现之 interfaces(例如 Cloneable),也包括 fields 和 methods 的所有信息,并可于运行时改变 fields 内容或唤起 methods。

    Java 反射机制容许程序在运行时加载、探知、使用编译期间完全未知的 classes。 换言之,Java 可以加载一个运行时才得知名称的 class,获得其完整结构。

    在jdk中,主要由以下类来实现java反射机制,这些类都位于java.lang.reflect包中。

    1.Class类:代表一个类

    2.Constructor类:代表类的构造方法

    3.Field类:代表类的成员变量(成员变量也称为类的属性)

    4.Method类:代表类的方法

    运用上面的Class,Constructor,Field,Method四个类,就可以解析无穷多的系统类和自定义结构。

    下面是具体的代码demo

    这是被测试类A

     1 package cn.yonyong.reflect.demo;
     2 /**
     3  * 
     4  * @author yonyong
     5  *
     6  */
     7 public class A {
     8     private int num;
     9     public A(){
    10         super();
    11     }
    12     
    13     public A(int num)
    14     {
    15         super();
    16         this.num=num;
    17     }
    18     
    19     public void func1(){}
    20     public void func2(){}
    21 }

    测试类

     1 package cn.yonyong.reflect.demo;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.Field;
     5 import java.lang.reflect.Method;
     6 
     7 public class Test {
     8     public static void main(String[] args) throws ClassNotFoundException {
     9 //        1.加载并实例化制定类A
    10     
    11         Class classInfo=Class.forName("cn.yonyong.reflect.demo.A");
    12         
    13 //        2.获取类A的构造方法
    14         Constructor cons[]=classInfo.getConstructors();
    15         
    16         System.out.println("类A的构造方法如下所示:");
    17         for(int i=0;i<cons.length;i++)
    18         {
    19             System.out.println(cons[i].toString());
    20         }
    21         
    22         System.out.println();
    23         
    24 //        3.获取类A的属性
    25         Field fields[]=classInfo.getDeclaredFields();
    26         System.out.println("类A的属性如下所示:");
    27         
    28         for(int i=0;i<fields.length;i++)
    29         {
    30             System.out.println(fields[i].toString());
    31         }
    32         
    33 //        4.获取类A的普通方法
    34         System.out.println();
    35         Method methods[]=classInfo.getDeclaredMethods();
    36         System.out.println("类A的普通方法如下所示:");
    37         for(int i=0;i<methods.length;i++)
    38         {
    39             System.out.println(methods[i].toString());
    40         }
    41     }
    42 }

    注意在测试类的11行,需要导入A的路径。如果只是A的话会报ClassNotFound异常。

  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/yonyong/p/8572068.html
Copyright © 2020-2023  润新知