首页 > 编程语言 >Java基础-学习笔记18

Java基础-学习笔记18

时间:2024-09-26 16:01:30浏览次数:9  
标签:反射 Java 对象 18 笔记 3.4 方法 Class 加载

18 反射

1. 反射机制

  • 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息(比如成员变量、构造器、成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到;

  • 加载完类之后,在堆中就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象包含了类的完整结构信息。通过这个对象得到类的结构,这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以,形象地称之为:反射

  • Java反射机制原理示意图

  1. 类编译阶段(代码阶段)【JVM底层】
    通过Javac编译后,会生成对应的字节码文件,包含其属性、方法等等信息
  1. 类加载阶段(Class类阶段)【JVM底层】
    当运行阶段,创建了一个对象(new)时,会导致类的加载。此时会把编译阶段的字节码文件加载到内存的堆里,生成一个Class类对象,在堆里。包含成员变量、构造器、成员方法等等其它信息。
    在这个过程中,字节码文件如何生成Class对象并且放在堆里呢?是通过类的加载器(ClassLoader)完成的,这个过程其实就体现了反射机制。
    在堆里生成的Class对象,其实是个数据结构,在底层,会把成员变量映射成,或者说当作一个对象来看待。比如说成员变量会对应成一个数组 Field[] fields,构造器也会当成一种对象,这个对象的类型就是 Constructor,可能有多个构造器,所以也会映射成数组,成员方法等等类似。
  1. 运行阶段【应用】
    new一个对象,进行类加载过后会生成这个对象,这个对象也在堆中,该对象能知道自己属于哪个Class对象。
    得到Class对象后,就可以创建对象,调用对象方法,操作属性等等。
  • Java反射机制可以完成:
  1. 在运行时判断任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时德奥任意一个类所具有的成员变量和方法
  4. 在运行时调用任意一个对象的成员变量和方法
  5. 生成动态代理
  • 反射相关的主要类

  • 反射的优缺点:
    优点: 可以多态的创建和使用对象(也是框架底层核心),灵活使用,没有反射机制,框架技术就失去底层支撑。
    缺点:使用反射基本是解释执行,堆执行速度有影响。

  • 反射调用优化——关闭访问检查

  1. Method 和 Field、Constructor 对象都有 setAccessible()方法
  2. setAccessible 作用是启动和禁用访问安全检查的开关
  3. 参数值为 true 表示 反射的对象在使用时取消访问检查,提高反射的效率。参数值为 false则表示反射的对象执行访问检查

2. Class类

  1. Class也是类,因此也继承 Object类
  2. Class类对象不是 new出来的,而是系统创建的(Class类对象是通过类加载器生成的,具体是loadClass方法完成类加载,然后生成某个类对应的Class对象)
  3. 对于某个类的Class类对象,在内存中只有一份,因为类只加载一次
  4. 每个类的实例都会记得自己是由哪个Class实例所生成
  5. 通过Class对象可以完整地得到一个类的完整结构,通过一系列API
  6. Class对象是存放在堆的
    7.类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(包括 方法代码,变量名,方法名,访问权限等等)
  • Class类的常用方法

  • 获取 Class类对象

  • 如下类型有Class对象

3. 类加载

3.1 基本说明

反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载

  1. 静态加载:编译时加载相关的类,如果没有则报错,依赖性太强
  2. 动态加载:运行时加载需要的类,如果运行时不用该类,即使不存在该类,则不报错,降低了依赖性

3.2 类加载时机

  1. 当创建对象(new)时;静态加载
  2. 当子类被加载时,父类也加载;静态加载
  3. 调用类中的静态成员时;静态加载
  4. 通过反射;动态加载

3.3 类加载过程图

3.4 类加载各阶段完成任务

3.4.1 加载阶段

3.4.2 连接阶段-验证

3.4.3 连接阶段-准备

3.4.4 连接阶段-解析

3.4.5 初始化Initialization

4. 反射获取类的结构信息

  • 通过反射获取类的结构信息

  • 通过反射创建对象

标签:反射,Java,对象,18,笔记,3.4,方法,Class,加载
From: https://www.cnblogs.com/97gogo/p/18429543

相关文章

  • (附源码)SSM网上书店系统-计算机毕设 18876
    SSM网上书店系统摘要本研究旨在设计与实现一个基于SSM框架的网上书店系统,以提升书店的线上运营效率和用户购书体验。通过整合SSM框架的优势,系统旨在实现图书信息管理、用户交互、订单处理等功能模块的高效运行。借助SSM框架的灵活性和稳定性,本系统将实现图书分类浏览、......
  • JavaScript对象方法
    对象方法已经讨论过hasOwnProperty(),propertyIsEnumerable()和isPrototypeOf()三个方法。以及静态函数,Object.create(),Object.getPrototypeOf()等。toString()方法无参数,返回一个表示调用这个方法的对象值的字符串。默认返回信息很少,例如对象:toLocaleString()方法该方......
  • Java单体服务和集群分布式SpringCloud微服务的理解
    单体应用存在的问题1.随着业务的发展开发变得越来越复杂。2.修改或者新增,需要对整个系统进行测试、重新部署。3.一个模块出现问题,很可能导致整个系统崩溃。4.多个开发团队同时对数据进行管理,容易产生安全漏洞。5.各个模块使用同一种技术进行开发,各个模块很难根据实际情况......
  • 从 SQL 和 Java 的对比理解集合化,SQL 到底比 Java 优势在哪?
    同样的数据计算任务,用SQL写和用Java写,后者常常会长出数倍。代码长不仅仅是写起来很繁琐,也不利于理解整体业务逻辑结构,算法过程都湮没在细节中。为什么Java会比SQL长这么多?我们来回答这个问题,并引出程序语言的集合化概念。首先是针对集合的运算能力,这个很容易理解。......
  • SPSS26统计分析笔记——7 回归分析
    1回归方程        回归方程一般表达式:y=f(x......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    PHP校园点餐小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园点餐小程序被用户普遍使用,为方便用户能够可以随时进行校园点餐小程序的数据信息管理,特开发了基......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
     springboot高校实验室管理系统摘要随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采springboot技术和mysql数据库来完成对系统的设计。整个开发过......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
     SpringBoot自然灾害应急救灾物资共享管理系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势。物资共享当然也不例外。自然灾害应急救灾物资共享管理系统是以实际运用为开发背景,运用软件工程原理和开发......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    高校学生社团管理系统摘要随着计算机科学技术的日渐成熟,人们已经深刻地认识到了计算机在各个领域中发挥的功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。目前学校学生社团的管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。......
  • (免费源码)计算机毕业设计必看必学 Ssm作业管理系统的设计与实现02334 原创定制程序 jav
    Ssm作业管理系统的设计与实现摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和......