类的加载,反射和注解详解

文章目录

  • 类的加载
    • 概述
    • 类加载器
      • 作用
      • 分类
      • 获取类加载器的方式
    • 双亲委派机制
      • 3种加载器的关系
      • 工作机制
    • 类加载器的应用
  • 反射
    • 概述
    • 关键
    • 获取类对象
    • 获取构造器对象
    • 获取方法对象
    • 获取成员变量对象
    • 作用
  • 注解
    • 概述
    • 作用
    • 自定义注解
      • 格式
      • 属性类型
    • 元注解
      • 常见的元注解
    • 注解解析
      • 概述
      • 方法
      • 技巧

类的加载

概述

当程序运行时,会将磁盘中的.class文件加载到内存中,并创建Class对象(基于.class文件创建)
Class对象:存储的是.class文件中的内容(构造方法,成员变量,成员方法)

  • 构造方法:构造器对象Constructor对象
  • 成员变量:字段对象Field对象
  • 成员方法:方法对象Method对象

类加载器

作用

是Java运行时环境的一部分,负责加载字节码文件,即将磁盘上的某个class文件读取到内存并生成Class对象

分类

  • 启动类加载器(Bootstrap ClassLoader):加载核心类库
  • 扩展类加载器(Extension ClassLoader):加载扩展类库
  • 应用程序类加载器(Application ClassLoader):加载程序员自己定义的类

Snipaste_2024-04-16_16-11-32.png

获取类加载器的方式

public ClassLoader getClassLoader() //返回该类的类加载器,启动类加载器的对象为null

双亲委派机制

3种加载器的关系

  1. 自定义类加载器的父级加载器为扩展类加载器
  2. 扩展类加载器的父级类加载器是启动类加载器

加载器的结论:这种关系称为类加载器的双亲委派模型

工作机制

  1. 某个"类加载器"收到类加载的请求,它首先不会尝试自己去加载这个类,而是把请求交给父级类加载器
  2. 因此,所有的类加载的请求最终都会传送到顶层的"启动类"加载器中
  3. 如果"父级类加载器"无法加载这个类,如何子级类加载器再去加载

类加载器的应用

加载配置文件并生成字节输入流
InputStream getResourceAsStream(“关联配置文件”)
结合Properties对象使用
注意:如果配置文件在src目录下,直接输入配置文件的文件名(相对路径,相对的是src目录)
代码如下:

public class Demo2 {public static void main(String[] args) throws IOException {//类对象Class aClass = Demo2.class;//根据类对象获取类加载器对象ClassLoader classLoader = aClass.getClassLoader();//根据类加载器对象,获取输入流InputStream is = classLoader.getResourceAsStream("user.properties");//创建Properties类Properties prop = new Properties();//prop读取isprop.load(is);//根据prop获取配置文件中的内容String name = prop.getProperty("name");System.out.println(name);int age = Integer.parseInt(prop.getProperty("age"));System.out.println(age);}
}

反射

概述

是运行时获取类的字节码文件对象,任何可以解析类中的全部成分

  • 反射是针对Class对象进行操作的
  • 是一种类的解剖技术(.class文件中书写有:构造方法,成员变量,成员方法)
    • 反射就可以获取.class文件中的构造方法,成员变量,成员方法
    • 获取到Constructor进行创建对象
    • 获取到Field进行赋值取值
    • 获取到Method可以调用方法执行

关键

得到编译以后的Class对象

获取类对象

  1. Class cls = Class.forName(“类的全限定名”);

类的全限定名:com.mysql.jdbc.Driver
要使用:Driver类
导入包:com.mysql.jdbc.Driver
编写代码:Driver driver = new Driver(); // 要求Driver类必须存在(如果Driver类不存在,代码报错)
Class.forName(“com.mysql.jdbc.Driver”);//不要求Driver类必须存在(不存在也不会报错)

  1. Class cls = 类名.class;

当在方法区中创建了.class文件的Class对象后,就可以使用

  1. Class cls = 对象名.getClass();

在创建具体的对象后,就可以通过对象名来获取Class对象
Snipaste_2024-04-16_17-04-20.png

获取构造器对象

通过类对象来获取Constructor
Snipaste_2024-04-16_17-09-15.png
11.png
获取私有构造器要想进行创建对象,在创建对象之前使用暴力破解即可
:继承中,父类的私有内容是可以继承的,但是由于java语言有权限过滤检查,所以不允许权限外的内容;Class对象总存储的private构造器,由于java语言有权限过滤检查,所以不允许访问私有构造器,而暴力破解可以设置本次访问暂时取消权限检查

获取方法对象

通过类对象获取Method
Snipaste_2024-04-16_18-19-52.png
Snipaste_2024-04-16_18-32-18.png
静态方法填null

获取成员变量对象

通过类对象获取Field
Snipaste_2024-04-16_18-44-49.png
Snipaste_2024-04-16_18-45-26.png

作用

  1. 在运行时得到一个类的全部成分任何操作
  2. 可以破坏封装性(很突出)
  3. 更重要的用途是适合:做Java高级框架
  4. 基本上主流框架都会基于反射设计一些通用技术功能

注解

概述

Annotation,对代码的描述,作为代码形式表示出来
单独使用没有任何意义,通常会结合反射技术一起使用

作用

可以书写在类、接口、自定义注解、构造器、成员方法、成员变量、参数
被注解标注的内容,可以实现一些特殊的作用(具体的作用以实际开发中的需求为准)

自定义注解

就是自己做一个注解来使用

格式

public @interface 注解名称 {
public 属性类型 属性名() default 默认值;
}

属性类型

  1. 八种基本数据类型
  2. String,Class,注解类型,枚举类
  3. 以上类型的一维数组形式

特殊属性

  • value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写,@UserService(“userService”)
  • 但是如果有多个属性,且多个属性没有默认值,那么value名称不能省略

元注解

书写在自定义注解上的注解(JDK提供的)

常见的元注解

  • @Target:约束自定义注解只能在哪些地方使用
  • @Retention:声明注解的生命周期

Snipaste_2024-04-16_20-08-43.png

注解解析

概述

注解中的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在注解就解析出内容

方法

s.png

技巧

  1. 判断某个位置上是否存在自定义注解
  2. 存在,对自定义注解进行解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

腾讯EdgeOne产品测评体验——实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入 写在最前面一、产品概述1.1 什么是边缘安全加速平台 EO?1.2 EdgeOne产品功能 二、准备工作2.1 选择:NS(Name Server)接入模式或 CN…

【教学类-52-05】20240417动物数独(4宫格)黏贴卡片需要至少几张?难度1-9 打印版

作品展示: 背景需求: 实际打印的是以下代码生成的动物数独(2*2)学具 【教学类-52-03】20240412动物数独(4宫格)难度1-9 打印版-CSDN博客文章浏览阅读1.1k次,点赞30次,收藏17次。【教…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗,修复VS、重装VA都解决不了 后来进到VS安装目录,删掉一个可疑文件后弹窗再也不出现了

秘塔和Kimi AI在资料查询和学习中的使用对比

一、引言 最近老猿在网上查资料时,基本上都使用Kimi AI进行查询,发现其查询资料后总结到位,知识点的准确度较高。今天早上收到一个消息,说新推出的秘塔AI比Kimi更新进,老猿利用在学习的《统计知识学习》简单对比试用了…

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台的个性…

数字世界的王国:揭秘Facebook的全球影响力

Facebook,作为全球最大的社交媒体平台,已经成为一个数字世界的重要组成部分,拥有数十亿的用户和庞大的影响力。在这篇文章中,我们将深入探讨Facebook的起源、发展、影响力及其在全球数字生态中的地位,以及它如何影响我…

25. 【Android教程】列表控件 ListView

在学习了 ScrollView 及 Adapter 两节内容之后,大家应该对 ListView 有了一些基本的了解,它是一个列表样式的 ViewGroup,将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的…

字典树(Trie树)详解

字典树(Trie树)详解 理论模块: trie 树 字典树是一种用于实现字符串快速检索的多叉树结构 trie 的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符 c c c 就沿着当前节点的 c c c 字符指针&#xff0c…

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

leetcode hot100_day20

4/14/2024 128.最长连续序列 自己的 这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题!!!! 这题让我想到了最长递增子序列,只是名字有点像。子序列和子数组还不一样一个连续…

算法练习第18天|111.二叉树的最小深度

111.二叉树的最小深度 111. 二叉树的最小深度 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最…

Unity 左右折叠显示与隐藏UI的简单实现

要实现一个简单的UI左右折叠显示与隐藏,可以结合遮罩,通过代码控制UI区块的宽度和位移来实现。 具体可以按以下步骤实现: 1、新建一个Image组件,并添加精灵,调整大小后,复制一份作为该UI的父物体&#xf…

CANoe中LIN工程主节点的配置(如何切换调度表)

1:前置条件 1)工程已经建立,simulation窗口已经配置好(包括且不限于通道mappin好,数据库文件已经添加) 2)我已系统自带sampleCfg工程,作为例子。如下图 2 :主节点的配置…

边缘计算网关主要有哪些功能?-天拓四方

随着物联网(IoT)的快速发展和普及,边缘计算网关已经成为了数据处理和传输的重要枢纽。作为一种集成数据采集、协议转换、数据处理、数据聚合和远程控制等多种功能的设备,边缘计算网关在降低网络延迟、提高数据处理效率以及减轻云数…

基于51单片机的温度控制恒温箱设计—数码管显示

基于51单片机的温度控制恒温箱 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 1.DS18B20温度传感器测温; 2.数码管实时显示温度; 3.按键设置温度上下限阈值&am…

Spring Boot 统一功能处理(二)

本篇主要介绍Spring Boot统一功能处理中的统一数据返回格式。 目录 一、定义统一的返回类 二、配置统一数据格式 三、测试配置效果 四、统一格式返回的优点 五、源码角度解析String问题 一、定义统一的返回类 在我们的接口在处理请求时,返回的结果可以说是参…

【CAN】采样点介绍及测试方法

文章目录 1 什么是采样点2 为什么需要采样点3 采样点的计算公式4 VH6501测试原理和方法4.1 VH6501测试采样点原理4.2 VH6501测试方法 >>返回总目录<< 1 什么是采样点 采样点是节点判断信号逻辑电平的位置&#xff0c;是CAN控制器读取总线电平&#xff0c;并解释各…

【Git教程】(十二)工作流之项目设置 — 何时使用工作流,工作流的结构,项目设置概述、执行过程及其实现 ~

Git教程 工作流之项目设置 1️⃣ 何时使用工作流2️⃣ 工作流的结构3️⃣ 概述4️⃣ 使用要求5️⃣ 执行过程及其实现5.1 基于项目目录创建一个新的版本库5.2 以文件访问的方式共享版本库5.3 用 Git daemon 来共享版本库5.4 用 HTTP 协议来共享版本库5.5 用 SSH 协议来共享版…

【论文阅读02】一种基于双通道的水下图像增强卷积神经网络

来源&#xff1a;海洋论坛▏一种基于双通道的水下图像增强卷积神经网络 当前不会的 一、背景&#xff1a; 水下图像增强方法包含有无水下成像模型的水下图像增强方法、基于水下成像模型的水下图像恢复方法、水下成像模型与深度学习相结合的方法以及完全采用深度学习的方…