入门级 JAVA反射机制
1.什么是反射?
Java中的反射机制是Java语言的一个很重要的特性,是Java “动态性” 的重要体现。
Java反射机制让我们在程序运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用他的任意一个方法。这种动态获取属性以及动态调用对象方法的功能就是“Java的反射机制”。
2.反射机制的本质(A)
在使用一个类之前必须先加载它,而当虚拟机加载完一个类后,就会在方法区创建一个这个类对应的class对象(一个类只有一个class对象),这个对象包含了类完整的结构信息。这个对象就像一面镜子,通过他可以“看到”整个类的结构,因此很形象的被称为“反射”。“class对象”就是反射机制的核心。
3.java.lang.Class 类(A)
Class类实现反射(Reflection)的基础,任何想实现动态加载、运行的类都必须先获得其相应的Class对象。
java.lang.Calss类十分特殊,它表示java中的所有类型(类、接口、枚举、注解、数组、原始数据类型(基本数据类型)以及void)
Class类没有公共的构造器,Class对象由虚拟机自行创建。
4.Class对象获取方式:
1.运用 Class.froName(包名+类名); (常用)
2.运用 .class 语法
3.运用 getClass()方法
5.反射机制的常见操作
1.动态加载类,动态获取类的信息(属性、方法、构造器等)
2.动态构造对象
3.动态调用类和对象的方法
4.动态调用及处理属性
5.获取泛型信息
6.处理注解
6.常见操作涉及到的类
Class类 代表类的结构信息
Method类 代表方法的结构信息
Field类 代表属性的结构信息
Construction类 代表构造器的结构信息
Annotation类 代表注解的结构信息
7.Class类常用方法
1.getClassLoader() 返回类的类加载器。
2.getName() 返回class对象表示的实体的名称(包含包名)
3.getSimpleName() 返回class对象表示的实体的简单名称(不含包名)
4.newInstance() 创建此class对象表示的类的新对象。
获取属性(字段):
1.getField(String name) 返回一个 Field对象,反射class对象表示的类或接口的指定公共字段。
2.getFields() 返回一个Field数组对象,反射class对象表示的类或接口的所有可访问的公共字段 。
3.getDeclaredField(String name) 返回一个 Field对象,它反射此class对象表示的类或接口中指定的声明字段。
4.getDeclaredFields() 返回一个Field数组对象反射此class对象表示的类或接口中声明的所有字段。
获取方法:
1.getMethod(String name, 类<?>... 参数(列表)类型)
返回一个 Method对象,它反射此表示的类或接口的指定公共方法。
2.getMethods() 返回一个Method对象数组 反射class对象表示的类或接口中所有公共方法,包括那些由类或接口和那些从父类和父接口继承的方法。
3.getDeclaredMethod(String name, 类<?>... 参数(列表)类型)
返回一个 Method对象,它反射此表示的类或接口中声明的指定方法。
4.getDeclaredMethods()
返回一个Method对象数组 反射class对象表示的类或接口中声明的所有方法,包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法。
8.Field类常用方法
1.getName() 返回此 Field对象表示的字段的名称。
2.getType() 返回此 Field对象表示的字段的类型(class)
3.get(Object obj) 返回此Field对象所表示的字段的值 。
4.set(Object obj, Object value)
将指定对象参数上的此 Field对象表示的字段设置为指定的新值。
set方法无法直接访问private属性,需要“禁用安全检查”,即setAcceessible(true)。
5.getModifiers() 以整数形式(int)返回由该 Field对象表示的字段的Java语言修饰符
9.Method类常用方法
1.getName() 返回由此Method对象表示的方法的名称
2.getReturnType() 返回一个class对象,表示Method对象表示的方法的返回值类型。
3.getParameterTypes()
返回一个class对象的数组, 以声明顺序表示Method对象表示的方法的形式参数类型。
4.getModifiers() 返回Method对象表示的方法的修饰符
5.invoke(Object obj, Object... args) args 参数列表
调用指定对象的Method对象表示的方法 args为实参
入门级 JAVA反射机制的更多相关文章
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- Java反射机制专题
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
- Java反射机制DOME
Java反射机制 public class TestHibernate { @Test public void TestHb(){ try { Class cs = Class.forName(&qu ...
- 反射——Java反射机制
反射概述 什么是反射? ① 反射的概念是由Smith在1982年首次提出的,主要指程序可以访问.检测和修改它本身状态或行为的一种能力. ② JAVA反射机制是在运行状态中,对应任意一个类,都能 ...
- Java反射机制可以动态修改实例中final修饰的成员变量吗?
问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...
随机推荐
- Ocelot中文文档-GraphQL
好吧!你明白我的意思Ocelot并不直接支持GraphQL,但有这么多人问起它,我想表明整合graphql-dotnet库是多么容易 请参阅示例项目OcelotGraphQL. 结合使用graphql ...
- 2018年,传言QQ首次被神秘黑客DDOS攻击,Python可以实现?
于2018-5-10日晚 网络流传黑客DDOS攻击了QQ服务器,导致大家聊天发送内容时出现感叹号.我们都知道一般情况下出现感叹号都是你的网络不稳定,或者...别人已经删除你了.然而昨晚很奇怪,发出的内 ...
- 团队项目第二阶段个人进展——Day10
一.昨天工作总结 冲刺第十天,做程序的测试,并修复一些小的bug 二.遇到的问题 无 三.今日工作规划 继续对程序进行测试优化
- Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)
一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用 ...
- Scala学习笔记:重要语法特性
1.变量声明 Scala 有两种变量, val 和 var val的值声明后不可变,var可变 val msg: String = "Hello yet again, world!&quo ...
- Tomcat 调优方案
Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力.提高Tomcat的性能可以分为两个方向. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有 ...
- Oracle客户端安装教程
链接:http://jingyan.baidu.com/article/3d69c55165bc94f0cf02d7d9.html (按照此链接不会安装错误)
- Java中创建线程的三种方式及其优缺点
1.自定义一个继承Thread的类,由于Java的单继承特性,限制了该类的扩展性. 2.实现Runnable接口,重写run()方法. 3.实现Callable接口,重写call方法.线程执行体可以有 ...
- 读书笔记---HTML5实战 MARCO CASARIO(后六章)
画布叠加:用CSS的z-index和position; 第八章 HTML5通信API ①XMLHTTPREQUEST是JS中用于服务器交互的API; ②用HTML5的POSTMESSAGE API实现 ...
- Python爬虫-尝试使用人工和OCR处理验证码模拟登入
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我 ...