首页 > Java > java教程 > 正文

JAVA中的反射

WBOY
发布: 2024-08-30 15:57:54
原创
869 人浏览过

反射,顾名思义,是JAVA中的一个API(应用程序编程接口)功能,通过它可以全面检查类的运行时实例。它是 Java.lang.reflect 包的一部分。这个包必须在程序开始时导入,然后调用函数来理解“反射”的功能。任何阶级的行为都可以研究;可以在运行时使用反射 API 提取或修改元数据。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法

反射API下提取类信息的常用函数语法如下:

  • public String getName(parameter ):此函数返回类名。
  • public boolean isInterface(parameter ):此函数检查该类是否是一个接口,并返回一个布尔值(true 或 false)。
  • public boolean isArray(parameter ):此函数检查变量是否为数组,并返回一个布尔值(true 或 false)。
  • public Constructor[] getDeclaredConstructors(parameter ) throws SecurityException: 该函数检查类中的构造函数并返回特定类中使用的构造函数的数量。此外,它还有一个安全异常和与使程序不间断工作相关的捕获。
  • public Method[] getDeclaredMethods(parameter) throws SecurityException: 该函数检查类中的方法并返回特定类中使用的方法的数量。此外,它还有一个安全异常和相关的捕获,使程序可以不间断地工作。
  • public Class getSuperclass(parameter ):此函数返回基类的超类。
  • public boolean is Primitive(parameter):此函数检查给定参数是否为原始参数并返回一个布尔值。

反射在 JAVA 中是如何工作的?

反射类使用Java.lang.reflect包中定义的不同方法来提取类信息。可以使用 getClass() 方法提取有关类的信息,使用 getConstructors() 方法提取构造函数,使用 getMethods() 方法提取方法信息。这些方法在反射 API 中定义,但返回类的信息,包括方法、构造函数等。反射API用于JAVA程序、IDE(集成开发环境),如eclipse、Netbeans。借助以下部分提供的示例可以很好地理解这一点。

JAVA中反射的例子

下面提到了不同的示例:

示例#1

代码:

//package test;
import java.lang.Class;
public class test{
public static void main(String args[]){
Class<Boolean> c1 = boolean.class;
System.out.println("Here, the class name is: "+c1.getName());
Class<test> c2 = test.class;
System.out.println("This is another instance of class is used to derive class name : "+c2.getName());
}
}
登录后复制

输出:

JAVA中的反射

说明:请检查上面提供的示例。它有一个包,其中包含所有名为“test”的类。测试包有一个“测试声明”类。该类还包含 main 方法,程序将从该方法开始执行。类“Class ”是jAVA中的标识符反射类。这个类是在上面声明的“java.lang.Class”库的帮助下启用的。 Boolean本身是JAVA中的一个类。布尔值是一种原始数据类型,如字符串、整数或字符。这个例子说明我们可以提取原始数据类型的信息(最终就是JAVA中的类,这也是JAVA被称为纯面向对象语言的原因)。“getName()”函数用于获取名称此处由名为“C1”的对象实例化的类。

在下一行中,不使用原始数据类型,而是考虑使用名为“test”的用户定义数据类型“class”来提取数据。 “类”是一个用名为“C2”的对象实例化的反射类。这里测试类名,并使用该对象使用函数“getName()”提取该类的名称。最终输出包含这些函数的返回值并显示在输出屏幕上。

示例#2

代码:

//package test;
import java.lang.Class;
class Simple{}
public class test{
public static void main(String args[]){
try{
Class<?> c=Class.<em>forName</em>("Simple");
System.<em>out</em>.println("The result is: "+c.isInterface());
}catch(Exception e){System.<em>out</em>.println(e);}
}
}
登录后复制

输出:

JAVA中的反射

说明: 在上面的示例中,创建了一个名为“test”的包,如前面示例 1 中创建的那样。该包包含一个类名称“Simple”,它不是主类。这里的主类是“测试”类,它包含程序将从中开始执行的主方法。 “类>”是反射类的标识符,它是通过此处名为“c”的对象实例化的。然后,该对象用于提取名为“isInaterface”的函数的决策指示符(True 或 false)。该函数引入一个类作为参数;在这种情况下,作为参数引入的类是“Simple”类。此类不是接口,因此在输出屏幕中返回“false”作为结果。为了调用这个函数,使用了类对象“c”。

优点

在JAVA中使用反射的一些优点如下:

  1. 这是提取任何类别信息的最佳方法之一。这些信息可以包含从构造函数到类和方法的信息。
  2. 此功能的最大优点之一是我们还可以提取有关私有方法和类的信息。因此,如果恶意隐藏在程序中,任何内容都可以使用此功能提取出来。
  3. 此功能为调试器提供了很大的灵活性,因为它们可以轻松调试类,而不是单独调试每个类。
  4. 这还添加了一项可扩展性功能,可以通过使用实例添加外部自定义类。
  5. 这在实例的帮助下体现了 OOP 语言的真正力量。
  6. 这用于在程序运行期间动态加载和重新加载类。

结论

JAVA反射使得在根本不知道类名的情况下内省类、接口、方法等成为可能。这一切都是在编译时完成的。这被认为是 JAVA 最强大的属性之一,因为它可以用来创建类的实例,并且可以使用它提取类的私有成员。开发人员也可以在运行时使用它并进行数据库对象映射。

以上是JAVA中的反射的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板