重学java 83.Java注解

news2024/12/23 18:50:45

As a failure,I met my last sound.

                                        —— 24.6.24

一、注解的介绍

1.引用数据类型:

        类、数组、接口、枚举、注解

jdk1.5版本的新特性

        一个引用数据类型

        和类,接口,枚举是同一个层次的

        引用数据类型:类、数组、接口、枚举、注解

2.作用:

        ① 说明:对代码进行说明,生成doc文档(API文档)

        ② 检查:检查代码是否符合条件     @override(重写)     @FunctionalInterface(函数式接口)

        ③ 分析:对代码进行分析,起到了代替配置文件的作用(会用)

3.JDK中的注解:

        @override ——> 检测此方法是否为重写方法
                jdk1.5版本,支持父类的方法重写
                jdk1.6版本,支持接口的方法重写

        @Deprecated ——>方法已经过时,不推荐使用

                调用方法的时候,方法上会有横线,但是能用

        @suppressWarnings ——> 消除警告        @suppressWarnings("all")

import java.util.ArrayList;
@SuppressWarnings("all")
public class Demo343Test01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.eat();

        System.out.println("——————————————————————————");
        ArrayList list = new ArrayList();
        list.add(new Person());
    }
}
public class Person {
    @Deprecated
    public void eat(){
        System.out.println("人要吃饭");
    }
}

二、注解的定义以及属性的定义格式

注解属性:本质上是抽象方法

1.定义

public @interface 注解名{

}

2.定义属性(抽象方法)

增强注解的作用

数据类型 属性名() ——> 此属性没有默认值,需要在使用注解的时候为其赋值

数据类型 属性名()defaut值->此属性有默认值,如果有需要,还可以二次赋值

3.注解定义中的属性类型

        a、八种基本类型

        b、String类型,class类型,枚举类型,注解类型

        c、以及以上类型的一维数组

public @interface Book {
    // 书名
    String bookName();
    // 作者
    String[] author();
    // 价格
    int price();
    // 数量 default 默认值 10本
    int count() default 10;
}

三、注解的使用

1.注解的使用:

        为注解中的属性赋值

2.使用位置上:

        在类上使用,方法上使用,成员变量上使用,局部变量上使用,参数位置使用等

3.使用格式:

a、@注解名(属性名=值,属性名=值...)
b、如果属性中有数组:@注解名(属性名={元素1,元素2...})

@Book(bookName = "云边有个小卖部",author = "张嘉译",price = 10,count = 11)
public class BookShelf {
}

4.注解注意事项:

        ① 空注解可以直接使用 --> 空注解就是注解中没有任何的属性

        ② 不同的位置可以使用一样的注解,但是同样的位置不能使用一样的注解

        ③ 使用注解时,如果此注解中有属性,注解中的属性一定要赋值,如果有多个属性,用,隔开
如果注解中的属性有数组,使用{}

        ④ 如果注解中的属性值有默认值,那么我们不必要写,也不用重新赋值,反之必须写上

        ⑤ 如果注解中只有一个属性,并且属性名叫value,那么使用注解的时候,属性名不用写,直接写值(包括单个类型,还包括数组)

@Book(bookName = "云边有个小卖部",author = "张嘉译",price = 10,count = 11)
public class BookShelf {
}

四、注解的解析 ——> AnnotatedElement接口

注解的解析:说白了就是将注解中的属性值获取出来

1.注解解析涉及到的接口:

        AnnotatedElement接口

实现类:AccessibleObject、Class、Constructor、 Executable、 Field、 Method、 Package、Parameter

2.解析思路:

        先判断指定位置上有没有使用指定的注解,如果有,获取指定的注解,获取注解中的属性值

        a、boolean isAnnotationPresent(class<? extends Annotation> annotationClass) ——> 判断指定位置上有没有指定的注解

        比如:判断Bookshelf上有没有Book注解

        Class bookshelf=Bookshelf.classbookshelf.isAnnotationPresent(Book.class)
        b、getAnnotation(Class<T> annotationclass) ——> 获取指定的注解,返回值类型为获取的注解类型

        比如:获取Bookshelf上的Book注解
        Class bookshelf = Bookshelf.class

        boolean result = bookshelf.isAnnotationPresent(Book.class)

        如果resut为true,证明Bookshelf上有Book注解,那就获取

        Book book =bookshelf.getAnnotation(Book.class)

BOOK接口

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD, ElementType.PARAMETER,ElementType.LOCAL_VARIABLE,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
    // 书名
    String bookName();
    // 作者
    String[] author();
    // 价格
    int price();
    // 数量 default 默认值 10本
    int count() default 10;
}

书籍信息类        

@Book(bookName = "云边有个小卖部",author = "张嘉译",price = 27,count = 11525)
public class BookShelf {
}

 主函数

import java.util.Arrays;

public class Demo344Test {
    public static void main(String[] args) {
        // 1.获取BookShelf的class对象
        Class<BookShelf> bookShelfClass = BookShelf.class;
        // 2.判断bookShelf上有没有Book注解
        boolean b = bookShelfClass.isAnnotationPresent(Book.class);
        // 如果b为true,就获取
        if (b){
            Book book = bookShelfClass.getAnnotation(Book.class);
            System.out.println(book.bookName());
            System.out.println(Arrays.toString(book.author()));
            System.out.println(book.price());
            System.out.println(book.count());
        }
    }
}

以上代码没有解析出来

原因:Book注解有可能就没有在内存中出现

五、元注解

1.概述:

        元注解就是管理注解的注解

2.管理注解的方式:

        a、控制注解的使用位置

                ① 控制注解是否能在类上使用

                ② 控制注解是否能在方法上使用

                ③ 控制注解是否能在构造上使用等

        b、控制注解的加载位置(生命周期)

                ① 控制注解是否能在源码中出现

                ② 控制注解是否能在class文件中出现控制

                ③ 注解是否能在内存中出现

3.使用

        a、@Target:控制注解的使用位置

        属性:ElementType[] value();

                ElementType是一个枚举,里面的成员可以类名直接调用

        ElementType中的成员:

                TYPE:控制注解能使用在类上

                FIELD:控制注解能使用在属性上

                METHOD:控制注解能使用在方法上

                PARAMETER:控制注解能使用在参数上

                CONSTRUCTOR:控制注解能使用在构造上

                LOCAL_VARIABLE:控制注解能使用在局部变量上

        b、@Retention:控制注解的生命周期(加载位置)

        属性:RetentionPoicy value();

                RetentionPolicy是一个枚举,里面的成员可以类名直接调用

        RetentionPolicy中的成员:

                SOURCE:控制注解能在源码中出现 ——> 默认

                CLASS:控制注解能在class文件中出现

                RUNTIME:控制注解能在内存中出现

BOOK接口

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD, ElementType.PARAMETER,ElementType.LOCAL_VARIABLE,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
    // 书名
    String bookName();
    // 作者
    String[] author();
    // 价格
    int price();
    // 数量 default 默认值 10本
    int count() default 10;
}

书籍信息类        

@Book(bookName = "云边有个小卖部",author = "张嘉译",price = 27,count = 11525)
public class BookShelf {
}

主函数

import java.util.Arrays;

public class Demo344Test {
    public static void main(String[] args) {
        // 1.获取BookShelf的class对象
        Class<BookShelf> bookShelfClass = BookShelf.class;
        // 2.判断bookShelf上有没有Book注解
        boolean b = bookShelfClass.isAnnotationPresent(Book.class);
        // 如果b为true,就获取
        if (b){
            Book book = bookShelfClass.getAnnotation(Book.class);
            System.out.println(book.bookName());
            System.out.println(Arrays.toString(book.author()));
            System.out.println(book.price());
            System.out.println(book.count());
        }
    }
}

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

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

相关文章

怎么在大模型之上构建应用?构建人工智能上层应用的框架——langchain

“langchain&#xff0c;在大模型之上构建应用的脚手架” 在大模型之上构建应用需要很多的步骤&#xff0c;比如文档加载&#xff0c;数据库读取&#xff0c;大模型加载&#xff0c;以及各个环节的连接等。 因此&#xff0c;就有了langchain这个开发框架&#xff0c;它的功能…

【gif制作】Win下视频生成GIF;工具GifCam单色保存,灰度保存,调速,编辑删除帧添加文本

下载地址 https://blog.bahraniapps.com/gifcam/#download https://gifcam.en.softonic.com/ 界面功能 GifCam 简洁、小巧的 gif 录制软件。GifCam就像照相机一样位于所有窗口的顶部&#xff0c;可以移动它并调整其大小录屏所需的区域。 如图&#xff1a;空闲状态下窗口内…

8.项目结构——黑马程序员Java最新AI+若依框架项目

目录 前言一、后端1.ruoyi-admin2.ruoyi-common3.ruoyi-framework4. ruoyi-generator(可删除)5.ruoyi-quartz&#xff08;可删除&#xff09;5.ruoyi-system6. ruoyi-ui7.sql8.依赖关系9. 总结 二、前端三、SQL 前言 提示&#xff1a;本篇叙述若依前后端项目结构 一、后端 1…

Python使用策略模式绘制图片分析多组数据

趋势分析&#xff1a;折线图静态比较&#xff1a;条形图分布分析&#xff1a;箱线图离散情况&#xff1a;散点图 import matplotlib.pylab as plt from abc import ABC, abstractmethod import seaborn as sns import pandas as pd import plotly.graph_objects as go import p…

项目方案:社会视频资源整合接入汇聚系统解决方案(七)

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

Redis数据库(一):Redis数据库介绍与安装

Redis是一种高性能的开源内存数据库&#xff0c;支持多种数据结构&#xff08;如字符串、列表、集合等&#xff09;&#xff0c;具有快速的读写速度。它提供持久化、主从复制、高可用性和分布式部署等功能&#xff0c;适用于缓存、实时分析、消息队列等应用场景。Redis使用简单…

Spring Boot + Vue 全栈开发,都需要哪些前端知识?

Node.js默认安装的npm包和工具的位置&#xff1a;Node.js目录\node_modules 在这个目录下你可以看见 npm目录&#xff0c;npm本身就是被NPM包管理器管理的一个工具&#xff0c;说明 Node.js已经集成了npm工具 #在命令提示符输入 npm -v 可查看当前npm版本 npm -v 二、使用n…

用英文介绍成都:Chengdu, China’s New Blueprint MEGACITY

Chengdu, China’s New Blueprint MEGACITY Link: https://www.youtube.com/watch?va6DR5Hh4AHM Southwest China’s largest metropolis and one of its greenest big cities has a population of 21 million. Chengdu exemplifies Beijing’s quest to modernize the count…

SiC MOSFET的性能优势以及技术难点

碳化硅功率器件近年来越来越广泛应用于工业领域&#xff0c;不断地推陈出新&#xff0c;作为一种新型功率器件&#xff0c;与传统的硅基功率器件相比&#xff0c;在某些特定条件下具有独特的优势&#xff0c;但也存在一定的不足&#xff0c;似乎对于碳化硅元器件的普及还有一些…

JAVA并发编程【Semaphore】源码解析

文章目录 一、Semaphore基础概念二、接口限流场景模拟三、Semaphore源码解析3.1、Semaphore结构解析3.1.1、Sync源码3.1.2、NonfairSync源码3.1.3、FairSync源码 3.2、Semaphore重点方法源码解析 本章节将对Semaphore类中所有方法进行源码解析并提供部分代码案例。可以让读者全…

服务器win10server,python安装paddleocr的踩坑日记

最近由于需要图像文字识别的简单业务&#xff0c;研究了一下&#xff0c;一是用大厂的文字识别api&#xff0c;如百度腾讯等&#xff0c;但这种免费版只有有限的调用次数&#xff0c;如百度只有每月只有1000次调用额度&#xff0c;个人也够用&#xff0c;但由于业务量大&#x…

通天星CMSV6车载定位监控平台 point_manage/merge SQL注入致RCE漏洞复现

0x01 产品简介 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 0x02 漏洞概述 …

泛微E9开发 根据判断条件,控制字段的编辑/必填属性

根据判断条件&#xff0c;控制字段的编辑/必填属性 1、需求说明2、实现方法3、扩展知识点1. 注册钩子事件&#xff0c;指定动作完成后触发1.1 接口名称及参数说明1.2 案例 2. 改变单个字段显示属性(只读/必填等)2.1 参数说明2.2 案例 1、需求说明 当字段“填报人”和字段“姓名…

测试基础15:测试用例设计方法-场景设计(流程分析)

课程大纲 1、定义 系统多个功能串联形成业务流程&#xff0c;不仅需要验证正确的主流程&#xff0c;而且需要验证各个功能点各种异常情况。 2、应用场景 与因果图&判定表方法的相似之处&#xff1a;界面需手动填写的输入框少&#xff0c;基本只需选择有限的几个&#xff08…

小型数据中心是什么?如何建设?

在数字化时代&#xff0c;小型数据中心正成为许多企业和组织加强数据管理和服务扩展的理想选择。与传统大型数据中心相比&#xff0c;小型数据中心以其灵活性、高效性和相对较低的运营成本吸引着越来越多的关注。然而&#xff0c;要成功建设一个小型数据中心&#xff0c;并确保…

TC3xx启动的功能安全机制浅析(1)

目录 1.SM基本概念 2.芯片启动阶段safety相关解读 3.小结 之前描述TC3xx Boot Firmware逻辑时提到了功能安全的内容&#xff0c;但没有完全展开&#xff1b;启动阶段与功能安全相关的内容如下图所示&#xff1a; 其中&#xff0c; 灰色背景指在BootRom Fireware里的运行逻辑…

720漫游工具又双叒叕上新了一批新功能

一、720漫游全景图片上传支持「自定义水印」 全景图片素材上传支持自定义水印设置&#xff0c;通过自定义水印&#xff0c;可以在全景图片上打上自定义的水印图片保护用户版权利益&#xff0c;同时强化自身品牌露出。具体操作如下&#xff1a; 打开「创建720漫游作品页」-选择…

一文搞懂Linux命令行下载OneDrive分享文件

一文搞懂Linux命令行下载OneDrive分享文件 什么问题&#xff1f; 因为OneDrive有些坑&#xff0c;无法从分享界面获取真实下载链接&#xff0c;比如下面这个链接&#xff1a; https://connecthkuhk-my.sharepoint.com/:f:/g/personal/jhyang13_connect_hku_hk/EsEgHtGOWbJIm…

信息系统分析与设计:重点内容|UML在线绘制|数据库技术

目录 UML在线绘图工具信息系统分析与设计第1章 系统思想第2章 信息、管理与信息系统第3章 信息系统建设概论&#x1f31f;第4章 系统规划&#x1f31f;第5章 系统分析概述第6章 流程建模&#x1f31f;业务流程图DFD数据流图&#x1f31f;数据字典 第7章 用例建模(用例图)&#…

【扫雷游戏】C语言详解

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…