这里是修真院后端小课堂,每篇分享文从

【Java反射的基本使用】

背景介绍

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

知识剖析

类的加载

类的加载指的是将类的class文件读入内存中,并为之创建一个java.lang.Class对象。

也就是说,当程序使用任何类时,系统都会为之建立一个java.lang.Class对象

类的加载由类加载器完成,类加载器通常由JVM提供

类对象

类是某一类对象的抽象,同样,Class是对类进行的抽象,类的本质实际上也是一个对象

类对象用来存储类的基本信息:类大小,类名称,类的版本,继承层次,以及消息与函数的映射表等

编码实战

获取类对象:

可以通过

Class.forName,

类.class,

对象.getClass()

来获得类的类对象

创建对象:

1.使用Class对象的newInstance()方法来创建对应类的实例

2.使用Class对象获取Constructor对象,再调用Constructor对象的NewInstance方法来创建对应的实例

访问属性:

Class对象的getField()方法可以获取该类的成员变量

然后使用Field对象提供的两个方法可以读取和设置成员变量

1.getXxx(Object obj)

2.setXxx(Object obj,Xxx val)

调用方法:

通过Class对象的getMethod()可以获取指定的方法,返回一个Method对象

每个Method方法对应一个方法,通关它的invoke()方法来调用相应的方法

具体演示

创建一个类:

public class Class1 {

public int YYY=0;

public String name="这是改之前的name";

public void say(){

System.out.println("这是Class1的say方法");

}

public int getYYY() {

return YYY;

}

public void setYYY(int YYY) {

this.YYY = YYY;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

获取类对象:

String classname = "Class1";

Class Clazz = Class.forName(classname);

创建对象:

Constructor c = Clazz.getConstructor();

Class1 aa =(Class1) c.newInstance();

访问并设置成员变量:

Field f1 = Clazz.getDeclaredField("name");

f1.set(aa,"wanger");

调用方法:

Method m = Clazz.getMethod("setName", String.class);

m.invoke(aa,"李四");

也可以通过外部文件来配置要加载的类,通过修改文件中的信息来改变想要加载的类

在src目录下建立一个文本文件,内容为:

class=Service1

通过读取外部文件类获取类名,并利用获取的类名来进行加载:

File f1 = new File("C:\\Users\\kelis\\IdeaProjects\\Spring_A\\src\\spring.txt");

Properties config = new Properties();

config.load(new FileInputStream(f1));

String className = (String) config.get("class");

Class clazz = Class.forName(className);

更多讨论:

反射和映射的区别

映射只是一种概念,通常是用代码方式来表示种对应关系。

反射是一种技术,很多高级语言都有这种技术。具体作用就是通过一个独立存在的对象,可以找到该对象的其他信息

反射有哪些应用场景呢

利用反射可以实现动态加载所需要的类,而不必修改程序的源代码

还由许多框架中都用到了反射技术,如spring,通过配置文件类设置想要加载的类

反射的作用,或者通俗解释下反射

实现动态加载类,增加了程序的灵活性,多用于各种开发框架

PPT:https://ptteng.github.io/PPT/PPT-java/java-task10-refect.html#/

java 反射基础_Java反射的基本使相关推荐

  1. java反射基础_Java反射基础(一)--Class对象获取

    ClassesJava中,任何一个对象要么是一个引用类型要么是基本数据类型.引用类型指的是那些直接或间接 Java.lang.Object的类.Classse,enum,和接口都是应用类型.基本类型是 ...

  2. java 反射基础_Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射.反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的 ...

  3. java 反射练习_JAVA反射的基础学习

    反射 :reflection 程序的一种内省机制 程序可以在运行期间动态的创建对象,获取对象类型,调用对象行为 内省机制在java和.net语言中有,在早期的C,C++,delphi,vb这些语言都没 ...

  4. 哪些类用来实现java反射机制_JAVA反射机制

    运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的"反射"机 ...

  5. java反射类型转换_java反射(转)

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ...

  6. java 反射机制_Java反射机制原理探究

    反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...

  7. 一篇文章弄懂Java反射基础和反射的应用场景

    文章目录 一.Java反射定义 二.Java反射机制实现 1.Class对象获取 2.获取class对象的摘要信息 3.获取class对象的属性.方法.构造函数等 三.反射的应用场景 1.动态代理 2 ...

  8. J2SE基础_JAVA反射基础解析

    很多优秀的开源框架基本原理就是反射,我认为自己不能不重视它 2020.04.18 一.简单了解Java.lang.reflect包 反射机制的相关类 Class类:代表类的实体,在运行的Java应用程 ...

  9. java 反射代价_Java反射机制

    # 反射 ## 什么是反射 反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法.. 静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行 ...

  10. java反射模式_Java反射机制详解

    对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...

最新文章

  1. 蚂蚁上市后,马云不是最大赢家,竟是她!
  2. python中文读音ndarray-numpy中的ndarray方法和属性详解
  3. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
  4. event对象获取方法总结在google浏览器下测试
  5. 你还在问android横竖屏切换的生命周期?
  6. 自然语言处理与文本检索
  7. 数据库索引介绍及使用
  8. 提高excel生产力_1.提高员工生产力和工作满意度
  9. Linux下Mongodb安装和启动配置
  10. java私塾(java私塾初级模拟银源代码)
  11. 电信无线路由器服务器网站,电信拨号上网连无线路由器的方法
  12. 面试题---jmeter
  13. 义齿计算机辅助制作技术包括,可摘局部义齿CAD/CAM/SLM金属3D打印制作新方法
  14. 增强 扫描王 源码_制作一个类“全能扫描王”的简易扫描软件(opencv)
  15. 012:tkinter+爬虫设计对联软件
  16. 记用Fiddler抓包爬取pc端微信公众号文章
  17. ai人工智能大爆发_人工智能解释了大爆炸之前发生的事情
  18. [13]ESP32+光流传感器PMW3901移植与调试
  19. 罗技无线网卡linux,Linux(Ubuntu)装罗技LMS避坑指南
  20. 带你上手 AI 大赛

热门文章

  1. 怎么利用计算机自带功能删除垃圾,如何清理电脑垃圾,教您如何彻底清除系统垃圾...
  2. Android 谷歌地图不显示,Android谷歌地图不显示在模拟器
  3. 正余弦信号的DFT频谱分析
  4. 什么是 Transactions Paper ?
  5. iOS 集成Facebook登陆
  6. 斐波那契数列(Fibonacci)
  7. 搭建和配置支撑2000人同时观看的流媒体服务器系统(Linux步骤详解)
  8. 考研数学:常见的初等函数求导公式以及其对应的积分公式
  9. op 圣诞节活动_圣诞节到了–这是我们精选的IT饼干笑话
  10. 材料力学:使用matlab绘制铰支梁在多个集中力、集中力偶矩作用下的挠曲线