搜索
首页Javajava教程JAVA中的反射

反射,顾名思义,是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());
}
}</test></boolean>

输出:

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中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器