IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA——反射笔记 -> 正文阅读

[Java知识库]JAVA——反射笔记

Java反射-Reflection

反射机制

  1. 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息(成员变量、构造器、成员方法等),并能操作对象的属性和方法。
  2. 反射在设计模式和框架底层都会用到。
  3. 加载完类之后,在堆中就会产生一个Class类型的对象,这个对象包含类的完整信息,通过这个对象得到类的结构。

Java程序三个阶段

在这里插入图片描述

反射相关的主要类

  1. java.lang.Class:代表一个类,Class对象表示某个类加载后在堆中的对象
  2. java.lang.reflect.Method:代表类的方法
  3. java.lang.reflect.Field:代表类的成员变量
  4. java.lang.reflect.Constructor:代表类的构造方法(构造)

反射优缺点

  1. 优点:可以动态的创建和使用对象(是框架底层核心),使用灵活
  2. 缺点:使用反射基本就是解释执行,对执行速度有影响

Class类

  1. java.lang.Class 类,就是为了实现反射提供的核心类之一

获取Class类对象的方式

  1. 编译阶段:Class.forName()
    应用场景:多用于配置文件,读取类全路径,加载类
  2. Class类阶段:类.class
    应用场景:多用于参数传递,比如通过反射得到对应构造器对象
  3. 类加载器阶段:类加载器得到Class对象
  4. 运行阶段:对象.getClass()
    应用场景:通过创建好的对象,获取Class对象
  5. 基础数据(int、char、boolean、float、double、byte、long、short)可以通过【基本数据类型.class】来得到Class类对象
  6. 基本数据类型对应的包装类,可以通过【.TYPE】得到Class类对象

哪些类型有Class对象

  1. 外部类,成员内部类,静态内部类,局部内部类,匿名内部类
  2. interface:接口
  3. 数组
  4. enum:枚举
  5. annotation:注解
  6. 基本数据类型
  7. void

类加载

  1. 静态加载:编译时加载相关的类,如果没有则报错,依赖性太强
  2. 动态加载:运行时加载需要的类,如果运行时不用该类,则不报错,降低了依赖性
  3. 加载阶段:JVM在该阶段的主要目的是将字节码从不同的数据源(可能是class文件、也可能是jar包、甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的java.lang.Class对象
  4. 连接阶段-验证(verification):目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
  5. 连接阶段-准备(Preparation):JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值)。这些变量所使用的内存都将在方法区中进行分配
  6. 连接阶段-解析(Resolution):虚拟机将常量池内的符号引用为直接引用的过程
  7. 初始化(Initialization):真正开始执行类中定义的Java程序代码,此阶段是执行clinit()方法的过程,依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并合并

通过反射创建对象

  • 调用类中的public修饰的无参构造器
  • 调用类中指定构造器
Class类相关方法
  • newInstance:调用类中的无参构造器,获取对应的对象,已过时
  • getConstructor(Class…Claszz):根据参数列表,获取对应的public构造器对象,替代上边的方法
  • getDecalaredConstructor(Class…Claszz):根据参数列表,获取相应的构造器对象
Constructor类相关方法
  • setAccessible:爆破
  • newInstance(Object…obj):调用构造器

自我练习

练习1
在这里插入图片描述

练习2
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:27:07  更:2021-11-12 19:29:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码