Java复习04 注解和反射

news2024/11/15 20:00:30

Java复习04 注解和反射

初学 注解和反射的时候 我的问题是 什么是注解? 什么是反射?单例模式 Stream ForkJoin有什么区别? 注解的分类有哪些?怎么区分?反射的分类有哪些?怎么区分? 反射里面Constructs Method Class 有什么区别?

1.注解(Annotations):

想象一下你在玩一款视频游戏。在这个游戏里,有些特殊的道具可以给你的角色带来特殊能力或者是解锁新的任务。

注解 就像是这些道具。它们不会改变游戏的基本玩法(也就是你的代码本身是怎么运行的),但它们可以给你的代码加上特殊标记(比如,让其他人知道这段代码不应该再被使用,或者是让代码按照一定的方式来运行)。这些注解有的是游戏(Java)自带的,有的则可以由玩家(程序员)自己创造。

2.反射(Reflection):

使用反射就像是你突然得到了一副能看见隐藏东西的眼镜。当你戴上这副眼镜,你可以看到游戏中不同角色和道具的内部信息,比如它们的能力值或者它们隐藏的秘密。在Java中,反射让你在程序运行的时候查看和修改对象的内部信息,即使平常我们看不见这些信息。

  • 使用反射,你可以看到一个对象的类信息(就像看角色的属性一样)。
  • 你可以找到和使用它的方法(就像发现角色可以使用的特殊技能)。
  • 你还可以创建新的对象或者修改现有对象的属性(就像改变角色的装备或者能力值)。

所以,反射就像是一副能让你看见更多内部信息的眼镜。

3.单例模式(Singleton Pattern):

这就好比学校里只有一个校长。无论什么时候你需要找校长,都是同一个人。单例模式确保了一个类在Java程序中只有一个实例,每次你要用这个类的时候,都会得到同一个对象。

4.Stream:

假如你在河边放了一艘小船,你可以顺流而下一边欣赏风景,一边经过不同的站点。在Java中,Stream就是数据的流,让你可以一步步地对数据进行操作,就像沿着河流顺流而下一样。

5.ForkJoin:

这就像是把一项大任务分成很多小任务,让你的朋友们一起帮忙。每个人完成自己的部分后,再把结果合起来,完成整个大任务。ForkJoin是Java中的一个框架,它帮助程序做到这一点,特别适合用于可以并行处理的大任务。

注解的分类

主要有以下几种:

元注解(Meta-Annotations)

元注解就是用来定义注解的注解。你可以想象元注解好比是游戏规则,它们告诉其他注解应该怎么"玩游戏"。Java中有几个元注解,比如:

  • @Target:告诉注解可以放在Java代码的哪些部分,比如方法、类或变量上。
  • @Retention:告诉Java程序这个注解要保留多久,是只在代码中存在,还是在编译后的.class文件中,或者是在运行时都可以访问。
  • @Inherited:告诉Java如果一个类使用了这个注解,那么子类自动继承这个注解。
  • @Documented:告诉Java这个注解应该被包括在用户的文档中。
内置注解(Built-in Annotations)

内置注解是Java自带的注解,你可以直接在代码中使用。是游戏开发者给你的默认道具,比如一个可以让角色跳得更高的弹簧鞋(@Override)或者一个提醒你这个道具即将在下个版本中被替换掉的标签(@Deprecated)。

一些常见的内置注解有:

  • @Override:告诉编译器你打算重写一个方法。
  • @Deprecated:告诉别人这个方法或者类已经过时了,建议不要用。
  • @SuppressWarnings:告诉编译器忽略特定的警告信息。
自定义注解:

自定义注解就是你可以创建自己的注解。想象一下,如果你在游戏中可以创建一个全新的角色,你可以定义它的名字、能力和特点。自定义注解允许你为你的代码定义特殊的规则或者提供特定的信息。或者理解成就是你有机会创造自己的道具。你可以决定它叫什么,能做什么,以及什么时候使用它。

反射读取注解(Reflection to Read Annotations)

反射读取注解就像是用一个特殊的镜子来查看物体上面有哪些标签。在Java中,你可以用反射这个功能来查看代码中的注解,了解注解里存储的信息。

反射的分类

其实是指通过反射我们可以做什么:

  • 访问类的信息(比如类的名字、它的方法和属性)。
  • 创建对象(就像有了乐高说明书,你可以按照说明书建造一个乐高模型)。
  • 调用方法(就像遥控一个机器人按你说的去做)。
  • 修改属性(就像改变乐高模型的一块砖的位置)。

在反射中,ConstructorMethodClass 代表不同的事物:

  • Constructor是建造者,就像乐高模型的说明书,告诉你怎么去建造一个对象。
  • Method是操作指南,告诉你可以用这个对象做什么,比如一个遥控车的遥控器上的按钮。
  • Class是整个图纸,告诉你这个对象是什么,有什么特点,是不是像一个遥控车或者一个机器人。

在这里插入图片描述

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

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

相关文章

视频水印如何去除?看看这三款工具!

在处理视频内容时,经常会遇到带有水印的视频素材。这些水印有时会遮挡重要的视觉信息,或者影响视频的美观性。为了保持视频内容的完整性和专业性,一个高效的视频去水印工具就显得尤为重要。下面我为大家推荐三款能够轻松去除视频水印的工具。…

Qt+FFmpeg+opengl从零制作视频播放器-3.解封装

解封装:如下图所示,就是将FLV、MKV、MP4等文件解封装为视频H.264或H.265压缩数据,音频MP3或AAC的压缩数据,下图为常用的基本操作。 ffmpeg使用解封装的基本流程如下: 在使用FFmpeg API之前,需要先注册API&a…

离线安装数据库 mysql 5.7 linux

离线安装数据库 mysql 5.7 linux 方法一 参考链接Linux(Debian10.2)安装MySQL5.7.24环境 赋予文件执行权限chmod x 文件名 使用root用户sudo su解压文件tar xvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz重命名mv mysql-5.7.42-linux-glibc2.12-x86_64 mysql将桌面的mys…

探索5个启发人心的网页设计案例,助您打造独特个人作品集!

对于网页设计师来说,网页设计作品集不仅是网页的门面,也是个人专业素养的体现。那么我们就不能掉以轻心地设计作品集了。无论是制作简单大方的作品集还是表现力极强的优秀作品集,设计师都必须非常努力地参考大量的设计作品来获得灵感。 国产…

Docker 安装部署 SqlServer 数据库

Docker 安装部署 SqlServer 数据库 背景: ​ 最近在开发数据中台数据集成模块,需要对接大量的数据做测试, 由于SqlServer 下载安装会耗费大量时间,所以采用 Docker 安装 Sqlserver 的方式部署数据库。 1、拉去 sqlserver 镜像 …

Linux系统下基于VSCode和Cmake进行C++开发

目录 简介一、GCC编译器1.1创建cpp文件1.2编译过程1.3g重要编译参数 二、GDB调试器三、IDE-VScode3.1 VSCode常用快捷键3.2 swap测试 四、CMake4.1CMake介绍4.2 CMake语法特性介绍4.3 CMake重要指令和常用变量4.4 CMake编译流程4.5CMake代码实践 五、使用VSCode进行完整项目开发…

Js输入输出语句

输入语法 prompt("您想输入的是&#xff1f;")输出语法: 语法1: document.write(‘要出的内容’&#xff09; <body><script>document.write("你好")document.write("<h1>我是<h1>")</script> </body>作…

基于单片机的事务管理系统

基于单片机的事务管理系统 摘 要 所谓事务管理系统就是主要用来做提醒&#xff0c;辅助以计时、秒表等的一个小系统。利用MCS51单片机即可完成系统硬件需要&#xff0c;成本低廉&#xff0c;程序简单&#xff0c;功能丰富实用&#xff0c;使用率广。根据题目的设计要求&#…

Github上哪些好用的安全工具1

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; URLFinder 一款快速提取网页信息的工具。该项目可以快速爬取网页上的 URL 地址、JS 文件里的 API 接口等信息&#xff0c;支持批量抓取…

QTextToSpeech的使用——Qt

前言 之前随便看了几眼QTextToSpeech的帮助就封装使用了&#xff0c;达到了效果就没再管了&#xff0c;最近需要在上面加功能&#xff08;变换语速&#xff09;&#xff0c;就写了个小Demo后&#xff0c;发现不对劲了。 出现的问题 场景 写了个队列添加到语音播放子线程中&a…

Day34:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行&反序列化链构造 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;…

Redis:使用redis-dump导出、导入、还原数据实例

redis的备份和还原&#xff0c;借助了第三方的工具&#xff0c;redis-dump 1、安装必要环境 yum -y install zlib-devel openssl-devel2、安装redis-dump 安装ruby&#xff1a; ruby下载地址&#xff1a;https://www.ruby-lang.org/zh_cn/downloads/ 我下载的是 2.5.0 版本…

GPT-SoVITS开源音色克隆框架的训练与调试

GPT-SoVITS开源框架的报错与调试 遇到的问题解决办法 GPT-SoVITS是一款创新的跨语言音色克隆工具&#xff0c;同时也是一个非常棒的少样本中文声音克隆项目。 它是是一个开源的TTS项目&#xff0c;只需要1分钟的音频文件就可以克隆声音&#xff0c;支持将汉语、英语、日语三种…

Linux ping可以上内网,不能上外网(系统重启DNS不生效)(直接更改/etc/resolv.conf修改nameserver重启被重置)

在Linux上可以连内网&#xff0c;不能连外网 ping内网可以&#xff0c;外网不行 可能的问题&#xff1a; 1.可能设置了网络防火墙&#xff0c;阻止了服务器访问外网的请求 2.DNS解析问题&#xff1a;检查服务器的DNS设置是否正确&#xff0c;能够正确解析外部域名。如果DNS解析…

案例分析篇15:软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Vue首屏优化方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。可以看个例子&#xff1a;…

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器&#xff0c;MC开服教程&#xff0c;All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&#xff1a;https:…

基于SpringBoot+Vue的电商应用系统的设计与实现

1 绪论 1.1研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&…

工具篇--从零开始学Git

一、git概述 1.1版本控制方式 集中式版本控制工具 集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&#xff0c; team 里每个人 work 时从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c; 局域网或互联网&#xff0c;个人修改之…

NB-IoT模块

目录 一. NB-IoT模块实物图 二. BC20/NB-IoT模块产品规格 三. 指令顺序 1. AT判断BC20模组是否正常 2. ATE0返回OK&#xff0c;已经返回回显 3. ATCSQ 4. AT_CEREG? 5. ATCGATT? 6. ATCGATT? 四. OneNet 连接 1. AT 查看 NB(当前NB)&#xff0c;云平台根据这两个…