我是靠谱客的博主 阳光小蝴蝶,最近开发中收集的这篇文章主要介绍All About JAVA 如何使用反射(Reflection ),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

来源:http://www.java-tips.org/java-se-tips/java.lang.reflect/how-to-use-reflection-in-java.html

反射是一个很强大的方法用来在运行时对类进行分析,譬如当一个新的类在运行时动态的加入到你的应用中,这个时候就可以使用反射机制得到这个类的结构信息。我们使用一个特殊的类来实现反射: Class.  。 Class类型的对象hold住了类的所有信息,并且可以使用gette方法来提取我们需要的信息。下面的例子提取了并在控制台输出了String类的结构信息,展示构造方法的名称,属性跟方法。

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionExample {

  public static void main(String[] args) {
    try {
      // Creates an object of type Class which contains the information of  创建一个包含String类信息的Class类型的对象。
      // the class String
      Class cl = Class.forName("java.lang.String");

      // getDeclaredFields() returns all the constructors of the class. 
      // getDeclaredFields()方法返回类的所有构造方法信息


      Constructor cnst[] = cl.getConstructors();

      // getFields() returns all the declared fields of the class.
      // getFields()方法返回类中定义的所有属性信息
      Field fld[] = cl.getDeclaredFields();

      // getMethods() returns all the declared methods of the class.
      // getMethods()方法返回类中定义的所有方法信息
      Method mtd[] = cl.getMethods();
      System.out.println("Name of the Constructors of the String class");

      for (int i = 0; i < cnst.length; i++) {
        System.out.println(cnst[i].getName());
      }

      System.out.println("Name of the Declared fields");

      for (int i = 0; i < fld.length; i++) {
        System.out.println(fld[i].getName());
      }

      System.out.println("Name of the Methods");

      for (int i = 0; i < mtd.length; i++) {
        System.out.println(mtd[i].getName());
      }

    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }


结果:

Name of the Constructors of the String class / String类构造方法名称
java.lang.String

……

Name of the Declared fields / 属性名
value
offset
count
hash
serialVersionUID

……

Name of the Methods / 方法名
hashCode
equals
compareTo
compareTo
indexOf
indexOf
indexOf
indexOf

……

 

来源2:http://www.java-tips.org/java-se-tips/java.lang.reflect/invoke-method-using-reflection.html

反射可以用来在运行时动态执行一个方法(即方法名字在运行时才给出或确定),下边是利用反射实现方法调用的示例代码:

import java.lang.reflect.Method;

public class RunMthdRef {
  public int add(int a, int b) {
    return a+b;
  }

  public int sub(int a, int b) {
    return a-b;
  }

  public int mul(int a, int b) {
    return a*b;
  }

  public int div(int a, int b) {
    return a/b;
  }

  public static void main(String[] args) {
    try {
      Integer[] input={new Integer(2),new Integer(6)};
      Class cl=Class.forName("RunMthdRef"); // 这里可能需要输入类的全称例如java.lang.String
      Class[] par=new Class[2];
      par[0]=Integer.TYPE;
      par[1]=Integer.TYPE;
      Method mthd=cl.getMethod("add",par);
      Integer output=(Integer)mthd.invoke(new RunMthdRef(),input);
      System.out.println(output.intValue());
    } catch (Exception e) {
      e.printStackTrace();
    } 
  }
} 

 

输出: 8

最后

以上就是阳光小蝴蝶为你收集整理的All About JAVA 如何使用反射(Reflection )的全部内容,希望文章能够帮你解决All About JAVA 如何使用反射(Reflection )所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部