入门级 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反射机制就已经不能动态修改它的值了. ...
随机推荐
- jsoup 使用总结3--高级用法之 not
jsoup 使用总结3--高级用法之 not 大部分时候,我们使用jsoup解析网页的时候,都是直接找到某一类元素,或者按某种selector查询:具体使用方法可以参考jsoup官网文档 例子代码: ...
- 通过Django Channels设计聊天机器人WEB框架
这两个月都在忙着设计针对银联客服业务的智能聊天机器人,上一周已经交完设计报告,这一周还和部门同事一起分享了系统设计及运行效果.因为时间的关系,系统原型我使用了Flask+jQuery的组合,感觉用以原 ...
- 学习MySQL我们应该知道哪些东西?
随笔:小编由于年前一直在找工作,而年后找到工作后又一直在忙工作,所以也很少有时间给大家写点什么,总的来说呢,回顾一下之前面试的几次经历,也曾小小的总结了一下自己的不足,发现自己虽然一直在原有的公司(外 ...
- STL-Map 源码剖析
G++ ,cygnus\cygwin-b20\include\g++\stl_map.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Compan ...
- Fiddler抓包工具证书安装
转自:https://www.cnblogs.com/hushaojun/p/6385947.html Fiddler证书安装(查看HTTPS) 现在很多带有比较重要信息的接口都使用了安全性更高的HT ...
- QT5:C++实现基于multimedia的音乐播放器(一)
上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ...
- Java线程池中submit() 和 execute()方法的区别
两个方法都可以向线程池提交任务, execute()方法的返回类型是void,它定义在Executor接口中, 而submit()方法可以返回持有计算结果的Future对象,它定义在ExecutorS ...
- PowerDesigner如何将设计的表更新到数据库中
前言: 软件开发的过程中,将设计的表更新到数据库中是一件繁琐的事情,使用好工具,能够事半功倍. 环境介绍:Oracle 11g x64 前期准备: 1.PowerDesigner工具(本人是32位的) ...
- [ Java面试题 ]多线程篇
1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一 ...
- DataSourceBuilder.create().build()
Spring Boot also provides a utility builder class DataSourceBuilder that can be used to create one o ...