问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

Java中的反射机制的原理和用途是什么?

提问网友 发布时间:2022-04-23 04:07
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:2022-04-07 20:34

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。

反射的好处:大大地增强了程序的扩展性。

反射的基本步骤:

1、获得Class对象,就是获取到指定的名称的字节码文件对象。

2、实例化对象,获得类的属性、方法或构造函数。

3、访问属性、调用方法、调用构造函数创建对象。

获取这个Class对象,有三种方式:

1:通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。

2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。

前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。

3:使用的Class类中的方法,静态的forName方法。

热心网友 回答时间:2022-04-07 21:52

一、反射的概述

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.


以上的总结就是什么是反射
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)
如图是类的正常加载过程:反射的原理在与class对象。
熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。


二、Java中为什么需要反射?反射要解决什么问题?

Java中编译类型有两种:

    静态编译:在编译时确定类型,绑定对象即通过。

    动态编译:运行时确定类型,绑定对象。动态编译最大限度地发挥了Java的灵活性,体现了多态的应用,可以减低类之间的耦合性。

    Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public、static等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。

    Reflection可以在运行时加载、探知、使用编译期间完全未知的classes。即Java程序可以加载一个运行时才得知名称的class,获取其完整构造,并生成其对象实体、或对其fields设值、或唤起其methods。

    反射(reflection)允许静态语言在运行时(runtime)检查、修改程序的结构与行为。
    在静态语言中,使用一个变量时,必须知道它的类型。在Java中,变量的类型信息在编译时都保存到了class文件中,这样在运行时才能保证准确无误;换句话说,程序在运行时的行为都是固定的。如果想在运行时改变,就需要反射这东西了。

    实现Java反射机制的类都位于java.lang.reflect包中:

    Class类:代表一个类

    Field类:代表类的成员变量(类的属性)

    Method类:代表类的方法

    Constructor类:代表类的构造方法

    Array类:提供了动态创建数组,以及访问数组的元素的静态方法

    一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持。

    三、使用

    1、获取Class对象的三种方式

    1.1 Object ——> getClass();
    1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
    1.3 通过Class类的静态方法:forName(String  className)(常用)

    请点击输入图片描述

    希望对您有所帮助!~

热心网友 回答时间:2022-04-07 23:27
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#
不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完
全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对
象实体、或对其fields设值、或唤起其methods。

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

有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法。我们朗朗上口动态绑定(dynamic binding)、动态链接(dynamic linking)、动态加载(dynamic loading)等。然而“动态”一词其实没有绝对而普遍适用的严格定义,有时候甚至像面向对象当初被导入编程领域一样,一人一把号,各吹各的调。

一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。

尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。
这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程
序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其
methods。这种“看透class”的能力(the ability of the program to examine
itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

Java如何能够做出上述的动态特性呢?这是一个深远话题,本文对此只简单介绍一些概念。整个篇幅最主要还是介绍
Reflection
APIs,也就是让读者知道如何探索class的结构、如何对某个“运行时才获知名称的class”生成一份实体、为其fields设值、调用其
methods。本文将谈到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • java反射机制及动态代理

    java反射机制及动态代理

    java反射机制及动态代理:目前正在看Hadoop RPC框架的源码,在深入了解这些之前,有一些基础知识需要回顾下。 1. java反射机制及动态代理 2. java网络编程 3. java NIO 先总结下第一个,java反射机制及动态代理的相关知识点: java反射机制 在看与java反射机制相关的代码前,试着
    查看详情
  • 采用封装及反射原理封装一个将对象装换为对数据库操作的工具类

    采用封装及反射原理封装一个将对象装换为对数据库操作的工具类

    采用封装及反射原理封装一个将对象装换为对数据库操作的工具类:package project02_Order_management.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet
    查看详情
java的反射技术有什么用? 能说一下java的反射机制吗 java的反射机制到底是什么意思 如何理解Java反射机制 java中反射原理,和应用 Java的反射机制是什么,如何实现 java的反射是基于怎样的原理 java反射机制的实现原理 vivo智能手机下载软件怎么打不开? 为什么VIVOy27手机新下载的软件安装后都显示停止运行,重启也不行,怎么办? vivo下载的软件打不开,还显示让通知vivo是怎么回事呀? vivo手机为什么突然打不开应用了。 vivo软件打不开怎么办 vivoY85下载软件打不开白屏? vivo智能手机下载东西软件怎么打不开? 手vivo突然很多软件 无响应打不开 vivo手机软件下载下来却打不开 为什么vivo的很多软件暂停打不开 为什么vivo手机下载的软件打不开? vivo软件找不到,无法打开,显示已经成功安装,请到设置中确认? Java中的反射机制是什么 我看的秘密糊糊,看不懂 Java Reflection (JAVA反射)机制详解 java中的反射机制是什么?有什么作用呢?求解,谢谢。 什么是JAVA的反射机制?有什么作用? 为什么使用java反射 linux系统下怎么连wifi? 如何在linux上接收wifi图象 linux系统怎么连wifi 如何在Linux系统下开启无线网络? 请问在WPS的表格中,如何给一排函数的结果求和? VM下的linux如何用wifi无线上网 EXCEL或WPS如何将数据分类求和统计? 物理机linux如何连接有线网和无线网? 虎牙直播首充初体验挂件在哪 Linux下如何通过命令行连接wifi 虎牙五级牌子七天初体验是只有七天吗? WPS表格函数,筛选后按类别自动求和,不包含隐藏? 请问为什么linux系统里面不能使用wifi呢? linux系统能使用wifi吗 关于棒棒堂王子
Top