`
scorpio
  • 浏览: 34238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java反射详细例子

阅读更多

package com.wxf.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Java 反射测试
 * @author Administrator
 *
 */

public class ReflectTest {

 /**
  * For the test of method :getAllMethodList()
  * @param obj
  * @param x
  * @return
  * @throws NullPointerException
  */
 private ReflectTest testMethod(Object obj, int x) throws NullPointerException {
  if (obj == null)
   throw new NullPointerException();
  return new ReflectTest();
 }

 /**
  * 获取类中所有的方法列表
  * 方法名称、行参类型、异常类型、返回值类型
  */
 private void getAllMethodList(Class c){

  Method methlist[] = c.getDeclaredMethods();//c.getMethods()可获取继承来的所有方法
  for (int i = 0; i < methlist.length; i++) {

   Method m = methlist[i];
   System.out.println("name = " + m.getName());//方法名
   System.out.println("declaring  class = " + m.getDeclaringClass());//所在的类
   
   Class pvec[] = m.getParameterTypes();//取得方法的形参类型
   for (int j = 0; j < pvec.length; j++)
    System.out.println("param #" + j + " " + pvec[j]);
   
   Class evec[] = m.getExceptionTypes();//取得方法抛出的异常对象类型
   for (int j = 0; j < evec.length; j++)
    System.out.println("exc #" + j + " " + evec[j]);
   
   System.out.println("return type = " + m.getReturnType());//取得方法返回值的类型
   System.out.println("-----");
  } 
 }
 
 /**
  * For the test of  method "excuteMethodByMethodName"
  * @param a
  * @param b
  * @return
  */
 public int add(int a ,int b){
  return a+b;
 }
 
 
 /**
  * 动态调用方法
  * @param c
  * @return
  */
 public Integer excuteMethodByMethodName(Class c,ReflectTest rt){
  
  Object resultObj = null;//存储结果对象
  Method md = null;
  
  Class[] ptpyes=new Class[2];//预定义要被调用的方法参数列表
  ptpyes[0]=Integer.TYPE;
  ptpyes[1]=Integer.TYPE;
  
  try {
   md = c.getMethod("add", ptpyes);//add是要被调用的方法名;通过行参ptpyes定位到具体哪个方法被调用(考虑多态的情况)
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   e.printStackTrace();
  }
  
  Object[] argus=new Object[2];//argus是传给被调用方法的实参
  argus[0]=new Integer(22);
  argus[1]=new Integer(33);
  
  try {
            //通过Method md      定位要被调用的方法名;
   //通过ReflectTest rt 定位要被调用的方法所在的类;
   //通过Object[] argus 将实参传递给被调用的方法
   resultObj = md.invoke(rt, argus);  
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   e.printStackTrace();
  }
  Integer result=(Integer)resultObj;
  return result;
 }
 
 public static void main(String args[]) {
  Class c=null;
  try {
   c=Class.forName("com.wxf.reflect.ReflectTest");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  ReflectTest rt=new ReflectTest();
  rt.getAllMethodList(c);
  Integer itg=rt.excuteMethodByMethodName(c, rt);
  System.out.println(itg.intValue());
 }

}
分享到:
评论
2 楼 小蔫嘟 2008-11-24  
谢谢!学习用用!!
1 楼 hongkong2394 2007-12-04  
真是太巧了.黄岗的啊.me too

相关推荐

    Java反射简单例子

    下面我们将详细探讨Java反射的基本概念、使用场景以及如何通过`ReflectTest.java`这个简单的例子来理解反射。 ### 1. 反射的基本概念 反射机制允许我们在运行时检查类的信息,包括类名、方法名、参数类型等,并且...

    JAVA反射简单例子

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Spring框架中,反射扮演着核心角色,...希望这个简单的反射例子能帮助你更好地理解和运用Java反射。

    java例子 java反射

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...通过分析这些例子,你可以更深入地理解Java反射的使用方式及其在实际开发中的应用。

    java 反射机制例子

    下面通过一个具体的示例来展示如何使用Java反射来获取类的详细信息: ```java import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.for...

    JAVA反射机制及应用例子

    JAVA反射机制及应用例子.。。Reflection API

    java反射简单例子demo

    Java反射是Java编程语言中的一个强大特性,它允许运行时检查类、接口、字段和方法的信息,甚至可以动态地创建对象并调用其方法。在Java中,`java.lang.reflect`包提供了对反射的支持,包括`Class`、`Constructor`、`...

    java 反射例子 代码

    java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;

    java反射例子,封装了一个反射帮助类

    在标题和描述中提到的“java反射例子,封装了一个反射帮助类”,这表明我们有一个实用工具类,可以帮助简化使用反射的复杂过程。 首先,让我们理解Java反射的基本概念。当我们的程序运行时,我们可以通过Class类来...

    java反射详解例子

    "java反射机制详解" Java 反射机制是 Java 语言中的一种功能,它允许程序员在运行时检查和修改一个类的结构和行为。 Java 反射机制提供了一种获取类的信息、创建对象、调用方法和获取字段值的方式。 在 Java 中,...

    java反射小例子

    标题“java反射小例子”暗示这是一个关于如何在实际项目中应用反射的小型示例。通常,这样的示例会展示如何使用反射来实现以下功能: 1. **获取类信息**:通过`Class.forName()`方法,我们可以根据类名动态加载类...

    Java反射案例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和Field...

    java反射机制例子

    标题"java反射机制例子"暗示我们将探讨如何在实际应用中使用Java反射。以下是一些关键知识点: 1. **Class对象**:每个类在Java中都有一个对应的Class对象,可以通过`Class.forName("类全名")`获取。Class对象包含...

    Java反射简单小实例

    ### Java反射机制简介 Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大...

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    java反射与泛型综合例子

    Java反射和泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的功能,并且在特定情况下可以相互结合使用。本文将深入探讨这两个概念,并通过一个具体的`Testrefl.java`示例来阐述它们的应用。 Java反射...

    Java反射概念及例子

    Java 反射概念及例子 Java 反射机制是一种让框架能够根据 "以字符串形式存在的信息" 来调用对象的属性和函数的技术。这种技术在框架编程中特别有用,因为框架编程中很多类是要根据配置文件来配置确定的,没办法预先...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    java反射机制以及试验例子

    有大量的实验例子和反射的各种方法说明,有大量的实验例子和反射的各种方法说明。

Global site tag (gtag.js) - Google Analytics