00024.05 反射:反射的概念、应用以及API和获取类的详细信息等

系列文章目录

前言

物理当中也有一个反射:光的反射、声音的反射,镜子的反射

我们这里的反射是什么呢?

一、是什么

1、是什么
我们这里的反射也跟物理中的反射类似,就是反过来,如下:本来应该是
声明类–>创建对象
现在反过来:
获取Class对象 --创建对象:获取类的详细信息
Class对象比喻为镜子中的那个影像

2、反射的作用

  • 1、在运行时能够获取任意类型的详细信息(注意是运行时不是编译时,运行时,区别与,编译时)
    (1)获取这个类的Class对象
    在这里插入图片描述
    在这里插入图片描述
    这里自动设置一下版本号(如果不设置版本号,后面你改了这个类,就会报版本不一致的问题)
    在这里插入图片描述
    然后就是 属性–构造器–getset、–toString方法一套操作
    然后进行导出,这样来得到数据的类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    现在项目中没有这个了
    在这里插入图片描述
    现在就去获取这个类型,,在编译期间去获取这个类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
【这个地方要补充………!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!………………………………………………………………………………………】
在这里插入图片描述
(2)获取这个类的详细信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有获取到东西
解决办法
在这里插入图片描述
一切皆对象:
(1)所有类型在内存中都是Class对象
(2)所有的属性都是Field对象
private int age;

属性类型:Field类型

类的概念:一类具有相同特性的事物的抽象描述。
所有的属性,都有相同特征:
都是有修饰符、数据类型、名称
都有相同的行为操作:get获取值/set设置值
所以把属性抽象为Field类,那么一个属性被加载到内存后,是用一个Field对象表示的。
(3)所有的构造器都是Constructor的对象
所有的构造器都有:
修饰符,名称,形参列表
都能 new 对象
所以把构造器抽象为Constructor类,那么一个构造器被加载到内存后,是用一个Constructor对象表示的。
在这里插入图片描述
(4)所有的方法都是Method对象
所有的方法都有:
修饰符、返回值类型、方法名、形参列表、抛出的异常列表
都能 被调用invoke

  • 2、在运行时能够创建任意引用数据类型的对象

  • 3、在运行时可以为任意对象的任意属性赋值,或者获取任意对象的任意属性的值

  • 4、在运行时可以调用任意对象的任意方法

  • 5、在运行时读取某个注解信息

  • 6、在运行时读取某个类的泛型实参

  • 动态的xx

  • 静态的xx

    • Java语言是静态语言。
  •  如果没有反射,Java必须在编译期间确定所有类型。Student stu = new Student();
    
  •  为了Java也支持动态型,在运行期间,确定某个类型的功能,才引入了反射机制。准动态语言。
    
  •  只是延迟了确定对象的类型而已。
    
  • Javascript,pythod是动态语言。

  • 静态语言:效率高,安全

  • 动态语言:灵活,不安全,边解释边执行,效率低

总结

1、反射的作用

  • 1、在运行时能够获取任意类型的详细信息(注意是运行时不是编译时,运行时,区别与,编译时)
  • 2、在运行时能够创建任意引用数据类型的对象
  • 3、在运行时可以为任意对象的任意属性赋值,或者获取任意对象的任意属性的值
  • 4、在运行时可以调用任意对象的任意方法
  • 5、在运行时读取某个注解信息
  • 6、在运行时读取某个类的泛型实参
    2、
  • 一切皆对象:
  • (1)所有类型在内存中都是Class对象
  • (2)所有的属性都是Field对象
  • private int age;
  • 属性类型:Field类型
  • 类的概念:一类具有相同特性的事物的抽象描述。
    所有的属性,都有相同特征:
    都是有修饰符、数据类型、名称
    都有相同的行为操作:get获取值/set设置值
    所以把属性抽象为Field类,那么一个属性被加载到内存后,是用一个Field对象表示的。
  • (3)所有的构造器都是Constructor的对象
  • 所有的构造器都有:
  •  修饰符,名称,形参列表
    
  •  都能 new 对象
    
  • 所以把构造器抽象为Constructor类,那么一个构造器被加载到内存后,是用一个Constructor对象表示的。
  • (4)所有的方法都是Method对象
  • 所有的方法都有:
  •  修饰符、返回值类型、方法名、形参列表、抛出的异常列表
    
  •  都能  被调用invoke
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
1. 反射的定义:反射在运行时动态地获取和操作的信息的能力。通过反射,我们可以在运行时获取的属性、方法和构造函数等信息,并且可以动态地调用这些方法和访问这些属性。 反射的用途: - 动态加载:在运行时根据某些条件动态地加载和使用。 - 动态获取的信息:可以获取的属性、方法和构造函数等信息。 - 动态调用方法:可以在运行时根据方法名动态地调用的方法。 - 动态修改属性:可以在运行时获取和设置的属性值。 - 实现通用框架和工具:反射使得我们可以编写更通用、灵活的代码,例如自动化测试框架、ORM(对象关系映射)框架等。 2. 反射的常用和方法: - Class :表示一个或接口,在反射中经常使用该获取的信息。 - Class.forName(String className):根据名动态加载,并返回对应的 Class 对象。 - getClass():返回对象的 Class 对象。 - Constructor :表示的构造函数。 - getConstructors():返回的所有公共构造函数。 - newInstance(Object... initargs):通过构造函数创建的对象。 - Field :表示的属性。 - getFields():返回所有公共属性。 - getField(String name):根据属性名获取定的公共属性。 - getDeclaredFields():返回所有属性,包括私有属性。 - getDeclaredField(String name):根据属性名获取定的属性,包括私有属性。 - Method :表示的方法。 - getMethods():返回的所有公共方法。 - getMethod(String name, Class<?>... parameterTypes):根据方法名和参数获取定的公共方法。 - getDeclaredMethods():返回的所有方法,包括私有方法。 - getDeclaredMethod(String name, Class<?>... parameterTypes):根据方法名和参数获取定的方法,包括私有方法。 这些和方法是反射中常用的工具,通过它们可以实现对的动态加载、属性访问、方法调用等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值