zoukankan      html  css  js  c++  java
  • 说说Java的反射

    不想当将军的士兵不是好士兵,不想当高手的程序员不是好的程序员,
    今天和大家说说Java中的反射机制吧,和高手又接近一步了.
    1.什么是反射??
    反射指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实例、或对其fields设值、或唤起其methods1。这种“看透class”的能力(the ability of the program to
    examine itself)被称为introspection(内省、内观、反省)。
    2.反射与RTTI
    RTTI在编译的时候打开和检查.class文件;
    反射在运行时打开和检查.class文件.
     
    3.如何使用Java的反射
    第一步:获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等
    第二步:调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表
    第三步:使用 reflection API 来操作这些信息
     
     
    4.看看反射的应用:
     
     
    import java.lang.reflect.*;
    public class DumpMethods {
       public static void main(String args[]) {
           try {
               Class c = Class.forName(args[0]);                  //第一步
               Method m[] = c.getDeclaredMethods();       //第二步
               for (int i = 0; i < m.length; i++)
                   System.out.println(m[i].toString());         //第三步
           } catch (Throwable e) {
               System.err.println(e);
           }
       }
    }

    按如下语句执行:

    java DumpMethods java.util.Stack

    它的结果输出为:

    public java.lang.Object java.util.Stack.push(java.lang.Object)

    public synchronized java.lang.Object java.util.Stack.pop()

    public synchronized java.lang.Object java.util.Stack.peek()

    public boolean java.util.Stack.empty()

    public synchronized int java.util.Stack.search(java.lang.Object)

    这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。

    这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类
     
    注:反射的功能很强大,大家可以去看看相关的文档的,我上面只是讲了基本的概念,让大家有个了解,想要练成武林高手还要看自己的努力
  • 相关阅读:
    poj_3984_迷宫问题_(bfs+记录路径)
    uva_10369_mst
    HDU_1875_mst
    人工智能、机器学习和深度学习做好准备的数据中心
    网络安全需求爆发,千亿产业人才匮乏
    物联网IOT市场才起步,还要10年才成熟
    AI人士不得不了解的十大机器算法
    中国“人工智能”实力最强的5所大学
    物联网的历史:过去与未来
    人工智能进入第四代,人工直觉成为下一步发展
  • 原文地址:https://www.cnblogs.com/xiaoyunxiao/p/2412005.html
Copyright © 2011-2022 走看看