Java反射机制剖析:定义和API

简介:

1、什么是Java反射机制

  Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法。这种运行时的动态获取就是Java的反射机制。其实这也是Java是动态语言的一个象征。

  用一句话来概括反射就是加载一个运行时才知道的类以及它的完整内部结构。

  2、为什么要有Java反射机制

  我们为什么要用Java的反射机制呢?

  我认为有两种:

  第一种:反射的目的就是为了扩展未知的应用。比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。

  第二种:在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象。

  一个生活中常看到的例子有助于理解我们为什么要用Java的反射机制:你进了一家饭店,你不知道他们都有那些菜,要多少钱。那么你第一件事情是干啥“服务员拿个菜单过来”,然后指着菜单说“我要这个,我要那个”。

  3、一起来看ReflectionAPI

  在生活中,我们使用一个未知的东西的时候总会用帮助来解决我们的使用问题,电视机有帮助,电脑有帮助,几乎所有的事物都携带着它的一本帮助,Java的反射机制也不例外。

  在JDK中有Reflection API的帮助,它主要说明了什么是Java反射机制,这种反射机制提供了什么样的属性和方法,进一步我们能够知道能够通过它完成什么样的工作

  下面咱就一起看看这部分的API。这些接口和类都位于lang包里。

  如图:

  接口:

  类:


  简单介绍一些类和接口的用法:

  1)Member成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息

  2)InvocationHandler是代理实例的调用处理程序实现的接口(这个接口的具体用法等到java反射机制剖析4着重介绍)

  3)Method提供一个类的方法的信息以及访问类的方法的接口。

  示例:

  1. import java.lang.reflect.Method;  
  2.  
  3. public class TestMethod {  
  4.  
  5.     /**  
  6.      * @param args  
  7.      * @throws Exception   
  8.      */ 
  9.     public static void main(String[] args) throws Exception {  
  10.         // TODO Auto-generated method stub  
  11.         Class classType=Class.forName(args[0]);  
  12.         Method methods[]=classType.getDeclaredMethods();  
  13.         for(int i=0;i<methods.length;i++){  
  14.             System.out.println(methods[i].toString());  
  15.         }  
  16.     }  
  17.  
  18. }

  4)Filed提供一个类的域的信息以及访问类的域的接口。

  示例:

  1. import java.lang.reflect.Field;  
  2.  
  3.  
  4. public class TestField {  
  5.  
  6.     /**  
  7.      * @param args  
  8.      * @throws Exception   
  9.      */ 
  10.     public static void main(String[] args) throws Exception {  
  11.         // TODO Auto-generated method stub  
  12.         Class classType=Class.forName(args[0]);  
  13.         Field[] fields = classType.getFields();  
  14.         for(int i=0;i<fields.length;i++){  
  15.         System.out.println(fields[i].toString());  
  16.         }  
  17.     }  
  18.  
  19. }

  5)Array类提供了动态创建和访问Java数组的方法。

  示例:

  1. import java.lang.reflect.Array;  
  2.  
  3.  
  4. public class TestArray {  
  5.  
  6.     public TestArray(){  
  7.           
  8.     }  
  9.     /**  
  10.      * @param args  
  11.      * @throws Exception   
  12.      */ 
  13.     public static void main(String[] args) throws Exception {  
  14.           
  15.         Class<?> classType = Class.forName("java.lang.String");  
  16.           
  17.         Object array = Array.newInstance(classType, 10);  
  18.           
  19.         Array.set(array, 5"hello");  
  20.           
  21.         String s = (String)Array.get(array, 5);  
  22.         System.out.println(s);  
  23.           
  24.     }  
  25.  
  26. }

  6)Proxy提供动态地生成代理类和类实例的静态方法(这个方法在java放射机制剖析4着重介绍)。

  其余的类和接口的使用方法详见API


本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
24天前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
3天前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
|
6天前
|
存储 Java 关系型数据库
掌握Java 8 Stream API的艺术:详解流式编程(一)
掌握Java 8 Stream API的艺术:详解流式编程
34 1
|
12天前
|
安全 Java 调度
深入理解Java中的线程安全与锁机制
【4月更文挑战第6天】 在并发编程领域,Java语言提供了强大的线程支持和同步机制来确保多线程环境下的数据一致性和线程安全性。本文将深入探讨Java中线程安全的概念、常见的线程安全问题以及如何使用不同的锁机制来解决这些问题。我们将从基本的synchronized关键字开始,到显式锁(如ReentrantLock),再到读写锁(ReadWriteLock)的讨论,并结合实例代码来展示它们在实际开发中的应用。通过本文,读者不仅能够理解线程安全的重要性,还能掌握如何有效地在Java中应用各种锁机制以保障程序的稳定运行。
|
15天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
18天前
|
Java 程序员 开发者
深入理解Java异常处理机制
在Java编程中,异常处理是确保程序健壮性与稳定性的重要组成部分。本文旨在深度剖析Java异常处理机制的核心概念、结构及其实际应用策略,帮助开发者更好地理解并运用异常处理来优化程序设计。我们将从Java异常体系结构入手,探讨try-catch-finally语句块的执行流程,分析自定义异常的必要性与实现方式,并通过实例演示如何有效地管理和处理异常情况。
23 3
|
24天前
|
设计模式 XML 存储
java中的反射机制
java中的反射机制
12 1
|
25天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
90 3
|
26天前
|
分布式计算 Java 程序员
Java 8新特性之Lambda表达式与Stream API
本文将详细介绍Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种简洁、匿名的函数表示方法,它允许我们将函数作为参数传递给其他方法。而Stream API则是一种新的数据处理方式,它允许我们以声明式的方式处理数据,从而提高代码的可读性和可维护性。通过本文的学习,你将能够掌握Lambda表达式和Stream API的基本用法,以及如何在项目中应用这两个新特性。
30 10
|
26天前
|
Java API 数据处理
Java 8新特性之Lambda表达式与Stream API
本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的语法结构,允许我们将函数作为参数传递给方法。而Stream API则是一种处理数据的新方式,它允许我们对数据进行更简洁、更高效的操作。通过学习这两个特性,我们可以编写出更简洁、更易读的Java代码。