JAVAJ基础学习之反射机制
一、语言的动态性介绍
强类型语言(静态类型语言)是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java
/C#弱类型语言(动态类型语言)是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型
的)。
二、java语言的动态性----反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都
能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
三、反射相关的API
1.java.lang包下
Class<T>:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源
2.java.lang.reflect包下
Field 类:代表类的成员变量(也称类的属性)
Method类:代表类的方法
Constructor 类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组的元素的静态方法.
四、Class<T>
1.类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象
2.Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自
动构造的,因此不能显式地声明一个Class对象
3.Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始
五、获取Class Object的方法
六、通过反射实例化对象
平常情况我们通过new Object来生成一个类的实例,但有时候我们没法直接new,只能通过反射动态生成。
实例化无参构造函数的对象,两种方式:
①Class. newInstance();
②Class. getConstructor (new Class[]{}).newInstance(new Object[]{})
实例化带参构造函数的对象:
clazz. getConstructor(Class<?>... parameterTypes) . newInstance(Object... initargs)
首先我们新建一个JavaBean—User,User继承自另一个Bean—BaseUser。
举例准备
实例化
七、通过反射动用Method(方法)
1. 获得当前类以及超类的public Method:
Method[] arrMethods = classType. getMethods();
2. 获得当前类申明的所有Method:
Method[] arrMethods = classType. getDeclaredMethods();
3. 获得当前类以及超类指定的public Method:
Method method = classType. getMethod(String name, Class<?>... parameterTypes);
4. 获得当前类申明的指定的Method:
Method method = classType. getDeclaredMethod(String name, Class<?>... parameterTypes)
5.通过反射动态运行指定Method:
Object obj = method. invoke(Object obj, Object... args)
八、通过反射调用Field(变量)
1. 获得当前类以及超类的public Field:
Field[] arrFields = classType. getFields();
2. 获得当前类申明的所有Field:
Field[] arrFields = classType. getDeclaredFields();
3. 获得当前类以及超类指定的public Field:
Field field = classType. getField(String name);
4. 获得当前类申明的指定的Field:
Field field = classType. getDeclaredField(String name);
5. 通过反射动态设定Field的值:
fieldType.set(Object obj, Object value);
6. 通过反射动态获取Field的值:
Object obj = fieldType. get(Object obj) ;
九、JAVA反射总结
1. 只要用到反射,先获得Class Object
2. 没有方法能获得当前类的超类的private方法和属性,你必须通过getSuperclass()找到超类以后再去尝试获得
3. 通常情况即使是当前类,private属性或方法也是不能访问的,你需要 设置压制权限setAccessible(true)来取得
private的访问权。但说实话,这已经破坏了面向对象的规则,所以除非万不得已,请尽量少用。
JAVAJ基础学习之反射机制相关推荐
- JAVA基础,注解反射机制
文章目录 注解 (非常重要) 什么是注解 基本注解 @Override @Deprecated @SuppressWarnings @SafeVarargs @FunctionalInterface ...
- [java学习] java_反射机制
摘自http://baike.baidu.com/view/3454964.htm#5 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-r ...
- Java 学习之反射机制“解刨”分解类,并获取内容!
正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...
- Java基础篇:反射机制详解
反射机制 反射机制.反射含义 1.利用反射获取类对象的三种方法 2.利用反射获取类对象的类名.方法.属性 3.利用反射获取类对象中的构造器.构造器参数类型.实例化构造器 实例化重点 类的加载方式不同 ...
- 大数据Java基础之Java反射机制
欢迎关注公众号,一起进步,共同成长. 15-1 Java反射机制概述 15-2 理解Class类并 获取Class的实例 15-3 类的加载 与ClassLoader的理解 15-4 创建运行时类的对 ...
- Android插件化开发基础之Java反射机制研究
一.获得Class对象 Class<?> c = Class.forName("classname"); 抛出ClassNotFoundException 二.获得实现 ...
- Mars3D开发基础学习:Property属性机制
平台是数据驱动和 time-dynamic visualization,这些可都是仰仗Property属性机制来实现的. Property最大的特点是和时间相互关联,在不同的时间可以动态地返回不同的属 ...
- Java反射机制再学习
Java反射机制的学习 Java反射机制的学习 转自:http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html 总结的很到位,记录下 ...
- 反射 数据类型_Java基础:反射机制详解
一.什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取t对 ...
最新文章
- ORA-01658:Unable to create INITIAL extent for segment in tablespace %s
- JavaScript 中常见设计模式整理
- 采样干扰十大滤波算法程序大全
- python : pandas库的后继者polars库
- 计算机导论中如何求模,计算机导论作业答案
- c语言实验上机报告,c语言上机实验报告_实验报告.doc
- matlab j计算丰水期的值,科学计算与MATLAB语言超星2020期末考试查题公众号答案
- 文通互联网图片文字识别系统
- unl导入导出数据库
- VMware虚拟机与windows主机之间相互复制粘贴
- 35、矩阵(稀疏矩阵)的压缩存储(一)
- npm install xxx 出现Unexpected token < in
- 百度图片下载器2.0
- 第1条:考虑采用静态工厂方法代替构造器
- scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
- Java中mysql的读写分离_mysql读写分离
- 简单快速建立pytorch环境YOLOv5目标检测 模型跑起来(超简单)
- 软件工程师安德烈·梅萨加冕世界小姐
- hadoop安装Snappy HBase本地安装Snappy
- 中国铁塔成立6周年 | 致敬时光,致敬奋斗者!