java 反射基础_Java反射的基本使
这里是修真院后端小课堂,每篇分享文从
【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反射的基本使相关推荐
- java反射基础_Java反射基础(一)--Class对象获取
ClassesJava中,任何一个对象要么是一个引用类型要么是基本数据类型.引用类型指的是那些直接或间接 Java.lang.Object的类.Classse,enum,和接口都是应用类型.基本类型是 ...
- java 反射基础_Java基础教程:反射基础
Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射.反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的 ...
- java 反射练习_JAVA反射的基础学习
反射 :reflection 程序的一种内省机制 程序可以在运行期间动态的创建对象,获取对象类型,调用对象行为 内省机制在java和.net语言中有,在早期的C,C++,delphi,vb这些语言都没 ...
- 哪些类用来实现java反射机制_JAVA反射机制
运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的"反射"机 ...
- java反射类型转换_java反射(转)
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ...
- java 反射机制_Java反射机制原理探究
反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...
- 一篇文章弄懂Java反射基础和反射的应用场景
文章目录 一.Java反射定义 二.Java反射机制实现 1.Class对象获取 2.获取class对象的摘要信息 3.获取class对象的属性.方法.构造函数等 三.反射的应用场景 1.动态代理 2 ...
- J2SE基础_JAVA反射基础解析
很多优秀的开源框架基本原理就是反射,我认为自己不能不重视它 2020.04.18 一.简单了解Java.lang.reflect包 反射机制的相关类 Class类:代表类的实体,在运行的Java应用程 ...
- java 反射代价_Java反射机制
# 反射 ## 什么是反射 反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法.. 静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行 ...
- java反射模式_Java反射机制详解
对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...
最新文章
- 蚂蚁上市后,马云不是最大赢家,竟是她!
- python中文读音ndarray-numpy中的ndarray方法和属性详解
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
- event对象获取方法总结在google浏览器下测试
- 你还在问android横竖屏切换的生命周期?
- 自然语言处理与文本检索
- 数据库索引介绍及使用
- 提高excel生产力_1.提高员工生产力和工作满意度
- Linux下Mongodb安装和启动配置
- java私塾(java私塾初级模拟银源代码)
- 电信无线路由器服务器网站,电信拨号上网连无线路由器的方法
- 面试题---jmeter
- 义齿计算机辅助制作技术包括,可摘局部义齿CAD/CAM/SLM金属3D打印制作新方法
- 增强 扫描王 源码_制作一个类“全能扫描王”的简易扫描软件(opencv)
- 012:tkinter+爬虫设计对联软件
- 记用Fiddler抓包爬取pc端微信公众号文章
- ai人工智能大爆发_人工智能解释了大爆炸之前发生的事情
- [13]ESP32+光流传感器PMW3901移植与调试
- 罗技无线网卡linux,Linux(Ubuntu)装罗技LMS避坑指南
- 带你上手 AI 大赛
热门文章
- 怎么利用计算机自带功能删除垃圾,如何清理电脑垃圾,教您如何彻底清除系统垃圾...
- Android 谷歌地图不显示,Android谷歌地图不显示在模拟器
- 正余弦信号的DFT频谱分析
- 什么是 Transactions Paper ?
- iOS 集成Facebook登陆
- 斐波那契数列(Fibonacci)
- 搭建和配置支撑2000人同时观看的流媒体服务器系统(Linux步骤详解)
- 考研数学:常见的初等函数求导公式以及其对应的积分公式
- op 圣诞节活动_圣诞节到了–这是我们精选的IT饼干笑话
- 材料力学:使用matlab绘制铰支梁在多个集中力、集中力偶矩作用下的挠曲线