【Java基础】注解与反射

news2024/11/24 8:52:49

一、学习笔记

(本文内容基本源自参考链接1视频教程)

1、注解的含义
1)注解(annotation)是从jdk5.0开始引入的新技术,其作用:不是程序本身,可对程序作解释(该作用与注释comment相同);可被其他程序读取。
2)格式注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。
3)Annotation在哪里使用?
可以附加在package、class、method、field 等上面,相当于给他们添加了额外的辅助信息我们可以通过反射机制编程实现对这些元数据的访问。

2、Java三个常见的内置注解:
1)@Override: 定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。
2)@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法、属性、类,但是不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
3)@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用即可,如:@SuppressWarnings("all")、@SuppressWarnings(“unchecked”)、@SuppressWarnings(value={"unchecked","deprecation"})等等。

3、元注解(meta-annotation)作用:

负责注解其他注解。Java定义了4个标准的meta-annotation类型 ( @Target,@Retention@Documented ,@nherited ),他们被用来提供对其他annotation类型作说明。这些类型和它们所支持的类在java.lang.annotation包中可以找到:
1)@Target: 用于描述注解的使用范围(即:被描述的注解可以用在什么地方);
2)@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE < CLASS < RUNTIME);
3)@Document:说明该注解将被包含在javadoc中;
4)@Inherited: 说明子类可以继承父类中的该注解。

4、元注解有很多元素类型,如下图

 其用法如下图代码第23、26行所示

5、使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

6、@interface用来声明一个注解,格式:public @interface 注解名{定义内容}。其中的每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值只能是基本类型Class、String,enum)。

7、可以通过默认值来声明参数的默认值。如果只有一个参数成员,一般参数名为值。注解元素必须要有值,我们定义注解元素时,经常使用空字符串0作为默认值 。


 8、动态语言与静态语言 
1)动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言: Object-C、C#、JavaScript、PHP、Python等。
2)静态语言与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。Java不是动态语言,但Java可以称之为“准动态语言”,即Java有一定的动态,我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活!

9、Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

Class c = Class.forName("java.lang.String")

10、加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象 (一个类只有个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以我们形象的称之为反射。

11、Class类
对象照镜子后可以得到的信息: 某个类的属性、方法和构造器、某个类到底实现了哪些接口对于每个类而言,JRE都为其保留一个不变的 Cass 类型的对象。一个 Class 对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/)的有关信息:
1)Class 本身也是一个类;
2)Class 对象只能由系统建立对象;
3)一个加载的类在JVM 中只会有一个Class实例;
4)一个Class对象对应的是一个加载到JVM中的一个.class文件;
5)每个类的实例都会记得自己是由哪个 Class 实例所生成;
6)通过Class可以完整地得到一个类中的所有被加载的结构;
7)Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Class对象。

二、程序案例

1、Java三个常见的内置注解的使用

 2、通过反射获取类的Class对象

 3、Class类的创建方式

 三种方式获得同样的hashcode:

三、参考链接

1、【狂神说Java】注解与反射https://www.bilibili.com/video/BV1p4411P7V3/?spm_id_from=333.337.search-card.all.click&vd_source=841fee104972680a6cac4dbdbf144b50

2、annotation type overridehttps://docs.oracle.com/javase/8/docs/api/java/lang/Override.html

3、

4、

5、

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

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

相关文章

iOS 性能优化方案-弱网优化

一、iPhone手机弱网环境配置 选择现有网络状态 或自定义网络状态 设置参数: 每个参数的含义大致如下: in bandwidth &#xff1a;下行带宽 in packet loss &#xff1a;下行丢包率 in delay &#xff1a;下行延迟(ms) out bandwidth &#xff1a;上行带宽 out packet los…

【解决】升级g++到8版本

升级g到8版本 g不提高到最新版本在一些操作会头文件报错&#xff0c;因此下面我们配置g编译器 要升级g编译器到版本8&#xff0c;您可以尝试以下步骤&#xff1a; 添加Developer Toolset存储库&#xff1a;在CentOS上&#xff0c;可以使用Red Hat Developer Toolset存储库来获…

PMP课堂模拟题目及解析(第15期)

141. 在新项目的干系人会议中&#xff0c;项目经理发现一名干系人对项目有抵触。项目经理记录这个问题&#xff0c;并对该干系人的参与程度评级。项目经理使用了哪项工具或技术来为干系人的参与程度评级&#xff1f; A. 干系人参与评估矩阵 B. 风险概率和影响评估 C. 人际关…

文件夹显示无法访问、拒绝访问需要权限的解决方法

为了简便管理资料&#xff0c;我们都会选择在电脑上建立文件夹来保存不同作用的资料。文件夹显示无法访问、拒绝访问需要权限的解决方法但是当我们遇到某些文件夹打不开无法访问、拒绝访问时该怎么办呢&#xff1f;这里和大家讲一个方法来解决遇到文件夹无法访问、拒绝访问的这…

Seata1.6.1的安装部署

一、业务系统&#xff08;一个简单采购系统&#xff0c;模拟采购同时增加库存&#xff09; 项目地址&#xff1a;JAVA学习代码: java学习代码&#xff0c;包括一些练习用的开源项目 二、部署TC服务 1、部署Seata的tc-server 1.1、下载 下载地址&#xff1a;下载中心 (seata.…

Rust语言从入门到入坑——(1)初窥Rust,这是个什么鬼!

文章目录 0 引入1、特性2、应用3、总结 0 引入 最近新闻来说&#xff0c;windows部分核心使用Rust语言重写&#xff0c;linux支持rust语言&#xff0c;我就在想什么魔力让该语言如此受大家喜爱&#xff0c;晚上搜了一下&#xff0c;对该语言最大的感触就是&#xff1a;入门难&…

APACHE-ATLAS-2.1.0 - ATLAS的RESTAPI?(四)

查看接口 1. 官方DOC&#xff1a;https://atlas.apache.org/api/v2/index.html 2. 官方SWAGGER&#xff1a;https://atlas.apache.org/api/v2/ui/index.html#/ 接口说明 &#xff08;1&#xff09;管理接口 ①. 查看服务器的状态 http://192.168.64.174:21000/api/atla…

什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?

1.什么是一致性哈希&#xff1f;一致性哈希是如何工作的&#xff1f;如何设计一致性哈希&#xff1f;05-25 2.系统设计&#xff1a;从零用户扩展到百万用户05-28 收起 如果你有 n 个缓存服务器&#xff0c;一个常见的负载均衡方式是使用以下的哈希方法&#xff1a; 服务器索…

UE5的IK Rig重定向注意问题

推荐先把官方文档看仔细&#xff0c;明白IK Rig重定向原理&#xff0c;对理解UE5怎么进行动画骨骼重定向&#xff0c;以及重定向后骨骼出现问题应该怎么调整非常有帮助。 IK Rig重定向 主要功能点 IK Rig IK Rig的作用是定义两个转化关系中的源骨骼和目标骨骼的主要部件的骨…

【大数据之Hive】四、配置Hive元数据存储到MySQL

需求&#xff1a;   把Hive元数据写道MySQL的metastore数据库中&#xff08;MySQL默认没有metastore数据库&#xff0c;需要提前创建&#xff1a;create database metastore;&#xff09;   连接地址&#xff1a;jdbc:mysql//hadoop102:3306/metastore   驱动&#xff1a…

Spring Boot 如何处理分布式事务?

Spring Boot分布式事务处理 分布式事务是指跨多个数据库或服务的事务&#xff0c;它需要确保所有参与者都能以一致的方式处理事务。在微服务架构中&#xff0c;由于每个服务都有自己的数据库&#xff0c;因此实现分布式事务非常重要。在本文中&#xff0c;我们将介绍如何在Spr…

Three.js——七、Group层级模型

关于Group Group 层级模型 通过 THREE.Group 类创建一个组对象 group,然后通过 add 方法把网格模型 mesh1、mesh2 作为设置为组对象 group 的子对象&#xff0c;然后在通过执行 scene.add(group)把组对象 group 作为场景对象的 scene 的子对象。也就是说场景对象是 scene 是 …

计算机底层的密码读书笔记

线程池的理解协程的理解高并发服务器的考量内存管理函数调用与栈影响多线程性能的缓存问题 线程池的理解 重复创建和销毁线程会存在开销&#xff0c;线程过多会消耗大量内存&#xff0c;较多线程之间的切换也存在开销 线程池用来复用线程&#xff0c;控制线程数量 线程池中…

(二)K8S常见集群架构搭建

1.基于KubeAdm搭建多节点K8S集群 安装docker&#xff08;主节点工作节点&#xff09; # 1.安装 Docker CE 的依赖软件包&#xff1a; yum install -y yum-utils device-mapper-persistent-data lvm2# 2.设置阿里云镜像 sudo yum-config-manager --add-repo http://mirrors.al…

【C语言】【典例详解】【刷题】猜名次猜凶手【循环练习】

目录 猜名次问题 典例题目 题目分析&#xff1a; 代码实现&#xff1a; 运行结果&#xff1a; 猜凶手问题 典例题目 题目分析 代码实现&#xff1a; 运行结果&#xff1a; 猜名次问题 典例题目 猜名次&#xff1a; 5位运动员参加了10米台跳水比赛&#xff0c;有人让…

VM虚拟机配置

1、安装环境 1&#xff09;需要安装的软件 2&#xff09;安装vm 3&#xff09;安装centos系统 2、VM虚拟机NAT模式上网设置 1&#xff09;vm虚拟机设置 启动虚拟机选择【虚拟网络编辑器】 选择NAT模式&#xff0c;更改下面的子网IP&#xff0c;改成你需要的任何一个子网…

大数据:诞生大数据,概述、大数据软件生态,Apache Hadoop概述

大数据&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要学&#x…

专业的 Code 128 条码标签如何创建?

Aspose.Words是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理&#xff0c;并…

Linux 系统的中断子系统基本框架(一)

中断是大家用的最多的功能&#xff0c;不管是单片机还是 Linux 系统&#xff0c;都需要用到中断&#xff0c;对它的深入理解是非常必要的。 为什么需要中断&#xff1f; 答案&#xff1a;处理器的速度比外设快很多&#xff0c;内核必须要处理其他任务&#xff0c;只有当外设准…

在centos上安装splint

lint lint是最著名的C语言工具之一&#xff0c;是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析&#xff0c;一般由UNIX系统提供。 工具介绍 与大多数C语言编译器相比&#xff0c;lint可以对程序进行更加广泛的错误分析&#xff0c;是一…