5.反射例子

来源:互联网 发布:js导入导出excel数据 编辑:程序博客网 时间:2024/04/27 04:27

通过学习了解到, Java反射机制是在运行状态中,对于任意一个,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

Java反射机制主要提供下面几种用途:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法

一个例子程序就能很好的解释反射了.

 

 

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

public class Reflection {

 
 public static void main(String[] args) throws ClassNotFoundException,
   InstantiationException, IllegalAccessException,
   IllegalArgumentException, InvocationTargetException {
  String str = "T";
  Class c = Class.forName(str);// Class类表示正在运行的类,它没有构造方法,现在的class类所表示的类是T

  Object o = c.newInstance();// 创建正在运行的Class对象所表示的类的一个实例 此时就是 new T()
  // 相当于 Object o =new T() o就可以当一个正常的实例T()使用了 也可以直接转换 T
  // o=(T)c.newInstance()
  System.out.println(o.getClass().getName());

  //Field 类能拿到一个类的属性  参考java.lang.reflect.*
  
  
  Method methods[] = c.getMethods();
  for (Method m : methods) {
   if (m.getName().equals("f")) {
    // m.invoke(o, null);//调用m这个方法 相当于o.m()
    // 第二个参数是m这个方法的可变参数,可以根据情况传0-n个参数
    m.invoke(o, 1, 2);
    // 例如,m.invoke(o,"aa",5,"ss")
    //m.getReturnType()  拿到返回值类型
    Object ps[] = m.getParameterTypes();//可以查看这个方法的参数类型
    for (Object p : ps) {
     System.out.println(p.toString());//一次打印出方法m的参数类型int,int
    }
   }
  }

 }

}

class T {
 public T() {
  System.out.println("T constractor!");
 }

 public void f(int i, int j) {
  System.out.println("T fff");

 }

}

 

0 0
原创粉丝点击