Java反射--藤原豆腐店自用
什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射就是把java类中的各种成分映射成一个个的Java对象,在运行时可以知道任意一个类的属性和方法
反射机制如何实现?
Java反射机制的实现要借助于4个类:Class,Constructor,Field,Method;
其中class代 表的是类对象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象,
class类介绍
作用
一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。
获取Class对象的三种方式
- 类名.class
- 对象.getClass()
- Class.forName(类全名)
获取属性
- getFiled: 获取public类型的属性
- getFileds:获取所有public类型的属性
- getDeclaredField:获取被定义过的属性(包括private、protected)
- getDeclaredFields:获取所有被定义过的的属性
获取方法
getMethod:获取public类型的方法
getMethods:获取所有public类型的方法
getDeclaredMethod:获取被定义过的方法(包括private、protected)
getDeclaredMethods:获取所有被定义过的的方法
invoke(class, method):就是调用Method类代表的方法。可以实现动态调用
获取构造方法
getConstructor:获取public类型的构造方法
getConstructors:获取所有public类型的构造方法
getDeclaredConstructor:获取被定义过的构造方法(包括private、protected)
getDeclaredConstructors:获取所有被定义过的构造方法
创建对象
newInstance:字节码类型的实例clazz调用newInstance()方法会返回一个Object类型的对象
Constructors.newInstance:
获取父类
接口:
- getAnnotatedInterfaces--- AnnotatedType[]:
- getInterfaces---Class[]:
父类
- getSuperclass:
- getInterfaces:
Modifier
内省
内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查。
不应该将内省和反射混淆。相对于内省,反射更进一步,是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。
JavaBean
JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
获取BeanInfo
BeanInfo这个类就可以获取到类中的方法和属性。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性
方法
- Introspector.getBeanInfo(Class A)---获取BeanInfo:
- beaninfo.getPropertyDescriptors(): 获得 beans propertydescriptor
- getReadMethod:获取一个对象的所有属性字段名称和其对应的值 获取get方法
- getWriteMethod:获取set方法
Class clazz = obj.getClass();//获取对象的类型PropertyDescriptor pd = getPropertyDescriptor(clazz,propertyName);//获取 clazz 类型中的 propertyName 的属性描述器Method getMethod = pd.getReadMethod();//从属性描述器中获取 get 方法Method setMethod = pd.getWriteMethod();//从属性描述器中获取 set 方法
动态代理
- JDK动态代理
- CLIB代理(第三方)
详情
Java反射--藤原豆腐店自用相关推荐
- Java八股文--藤原豆腐店自用
目录 1.Java跨平台的原理 2.基本数据类型所占字节数 3.Java中表示价格为啥不用double,而是用BigDecimal 4.双精度&单精度的区别 5.面向对象的特征 5.1.封装: ...
- 线程八股文--藤原豆腐店自用
目录 1.什么是进程.什么是线程,他们之间是什么关系? 1.1.进程是什么? 1.2.线程是什么? 1.什么是进程.什么是线程,他们之间是什么关系? 1.1.进程是什么? 是具有一定独立功能的程序,他 ...
- 数据库八股文--藤原豆腐店自用
目录 数据库的分类和常见的数据库你知道那些? 关系型数据库 非关系型数据库 介绍一下三范式,设计表时一定要追求三范式吗? 数据库的分类和常见的数据库你知道那些? 关系型数据库 典型产品:MySQL.S ...
- JVM--藤原豆腐店自用
目录 1.类加载 1.1.JVM类加载过程: 1.2.类的初始化过程 1.3.类加载器 1.3.1.启动类加载器(BootStrap ClassLoader) 1.3.2.扩展类加载器(Extensi ...
- JDBC--藤原豆腐店自用
Java Database Connectivity,简称JDBC 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法. 驱动程序 驱动程序:数据 ...
- 【转】java反射--注解
[译]8. Java反射--注解 原博地址:https://www.cnblogs.com/penghongwei/p/3300087.html 翻译原文地址:http://tutorials.jen ...
- Java 反射 不定参数bug
Java 反射 不定参数bug 遇到的第一个关于反射的bug:java.lang.IllegalArgumentException: wrong number of arguments的问题解析如下: ...
- 粗浅看 java反射机制
Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifi ...
- Java反射,从0开始
目录 静态VS动态语言 Java Reflection(反射)介绍 Java反射机制提供的功能 Java反射优点和缺点 反射相关的主要API 获取运行时类的完整结构 反射的使用 有了Class对象,如 ...
最新文章
- 对数函数定义域和值域为r_100观察法求函数的值域
- AI 还原宋代皇帝,原来这么帅?!
- ssm中shiro的使用
- WIN7的MKLINK命令,创建文件(夹)连接(链接)
- 深入理解Java虚拟机(2)
- Redis基础高级学习笔记
- 一款好用的轮播插件swiper,适用于移动端和web
- python 菜鸟教程字符串反转函数_转自python的菜鸟教程---字符串相关操作
- java编程思想怎么样_读完java编程思想后的思考?
- 无法连接到WMI提供程序。你没有权限或者该服务器无访问
- 6、vueJs基础知识06
- 【扯淡】今天看了《写给失眠者的心理学》,下面开始借鉴与脑洞大开
- 互联网+ 何人能挡?带着你的Code飞奔吧!
- keil4 c语言标准,求助!关于KEIL4和C语言
- 系统架构设计师论文范文
- 将多个Bip动作合成一个
- 【遇到的问题】VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。
- 10 Habits of All Successful People 成功人士的10个习惯
- cdr安装成功后出现重启计算机,CDR安装后重启电脑就打不开是什么原因?
- 一年365天,把1.0作为每天的能力值基础,每天原地踏步 则能力值为1.0,如果每天努力一点点则能力值提高1%,每天再努力一点则能力值提高2%,那一年后,这3种行为收获的成果相差多少呢?