JAVA反射

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

  Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。以下为JAVA中运用反射的实例:

  1 /**
  2    @version 1.1 2004-02-21
  3    @author Cay Horstmann
  4 */
  5 
  6 import java.util.*;
  7 import java.lang.reflect.*;
  8 
  9 public class ReflectionTest
 10 {  
 11    public static void main(String[] args)
 12    {  
 13       // read class name from command line args or user input
 14       String name;
 15       if (args.length > 0) 
 16          name = args[0];
 17       else 
 18       {
 19          Scanner in = new Scanner(System.in);
 20          System.out.println("Enter class name (e.g. java.util.Date): ");
 21          name = in.next();
 22       }
 23 
 24       try
 25       {  
 26          // print class name and superclass name (if != Object)
 27          Class cl = Class.forName(name);
 28          Class supercl = cl.getSuperclass();
 29          System.out.print("class " + name);
 30          if (supercl != null && supercl != Object.class)
 31             System.out.print(" extends " + supercl.getName());
 32 
 33          System.out.print("\n{\n");
 34          printConstructors(cl);
 35          System.out.println();
 36          printMethods(cl);
 37          System.out.println();
 38          printFields(cl);
 39          System.out.println("}");
 40       }
 41       catch(ClassNotFoundException e) { e.printStackTrace(); }
 42       System.exit(0);
 43    }
 44 
 45    /**
 46       Prints all constructors of a class
 47       @param cl a class
 48     */
 49    public static void printConstructors(Class cl)
 50    {  
 51       Constructor[] constructors = cl.getDeclaredConstructors();
 52 
 53       for (Constructor c : constructors)
 54       {           
 55          String name = c.getName();
 56          System.out.print("   " + Modifier.toString(c.getModifiers()));
 57          System.out.print(" " + name + "(");
 58 
 59          // print parameter types
 60          Class[] paramTypes = c.getParameterTypes();
 61          for (int j = 0; j < paramTypes.length; j++)
 62          {  
 63             if (j > 0) System.out.print(", ");
 64             System.out.print(paramTypes[j].getName());
 65          }
 66          System.out.println(");");
 67       }
 68    }
 69 
 70    /**
 71       Prints all methods of a class
 72       @param cl a class
 73     */
 74    public static void printMethods(Class cl)
 75    {  
 76       Method[] methods = cl.getDeclaredMethods();
 77 
 78       for (Method m : methods)
 79       {  
 80          Class retType = m.getReturnType();
 81          String name = m.getName();
 82 
 83          // print modifiers, return type and method name
 84          System.out.print("   " + Modifier.toString(m.getModifiers()));
 85          System.out.print(" " + retType.getName() + " " + name + "(");
 86 
 87          // print parameter types
 88          Class[] paramTypes = m.getParameterTypes();
 89          for (int j = 0; j < paramTypes.length; j++)
 90          {  
 91             if (j > 0) System.out.print(", ");
 92             System.out.print(paramTypes[j].getName());
 93          }
 94          System.out.println(");");
 95       }
 96    }
 97 
 98    /**
 99       Prints all fields of a class
100       @param cl a class
101     */
102    public static void printFields(Class cl)
103    {  
104       Field[] fields = cl.getDeclaredFields();
105 
106       for (Field f : fields)
107       {  
108          Class type = f.getType();
109          String name = f.getName();
110          System.out.print("   " + Modifier.toString(f.getModifiers()));
111          System.out.println(" " + type.getName() + " " + name + ";");
112       }
113    }
114 }

 

    

相关文章
|
26天前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
1月前
|
Java
Java的反射
Java的反射。
26 2
|
2月前
|
存储 Java
[Java]反射
本文详细介绍了Java反射机制的基本概念、使用方法及其注意事项。首先解释了反射的定义和类加载过程,接着通过具体示例展示了如何使用反射获取和操作类的构造方法、方法和变量。文章还讨论了反射在类加载、内部类、父类成员访问等方面的特殊行为,并提供了通过反射跳过泛型检查的示例。最后,简要介绍了字面量和符号引用的概念。全文旨在帮助读者深入理解反射机制及其应用场景。
37 0
[Java]反射
|
3月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
74 9
Java——反射&枚举
|
2月前
|
安全 Java 测试技术
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 2
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
17 0
|
3月前
|
Java 程序员 编译器
Java的反射技术reflect
Java的反射技术允许程序在运行时动态加载和操作类,基于字节码文件构建中间语言代码,进而生成机器码在JVM上执行,实现了“一次编译,到处运行”。此技术虽需更多运行时间,但广泛应用于Spring框架的持续集成、动态配置及三大特性(IOC、DI、AOP)中,支持企业级应用的迭代升级和灵活配置管理,适用于集群部署与数据同步场景。
|
3月前
|
存储 安全 Java
扫盲java基础-反射(一)
扫盲java基础-反射(一)
|
3月前
|
Java
扫盲java基础-反射(二)
扫盲java基础-反射(二)
下一篇
DataWorks