重学java 83.Java注解

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());
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频格式转换方法:如何使用视频转换器软件转换视频

众所周知&#xff0c;目前存在许多不同的视频和音频格式。但我们的媒体播放器、移动设备、PC 程序等仅兼容少数特定格式。例如&#xff0c;如果不先将其转换为 MP4、MOV 或 M4V 文件&#xff0c;AVI、WMV 或 MKV 文件就无法在 iPhone 上播放。 视频转换器允许您将一种视频格式…

2024年经济与国际贸易国际会议(ICEIT 2024)

2024年经济与国际贸易国际会议&#xff08;ICEIT 2024&#xff09; 2024 International Conference on Economy and International Trade 【重要信息】 大会地点&#xff1a;温州 大会官网&#xff1a;http://www.iciceit.com 投稿邮箱&#xff1a;iciceitsub-conf.com 【注意…

cityscapes数据集转换为COCO数据集格式【速来,我吃过的苦,兄弟们就别再吃了】

利用CityScapes数据集&#xff0c;将其转换为COCO格式的实例分割数据集 – – – 进而再训练出新的YOLOv8-seg模型 写个前言&#xff1a; 人嘛&#xff0c;总想着偷点懒&#xff0c;有现成的数据集&#xff0c;就得拿来用&#xff0c;是吧&#xff1f;确实是这样。 接下来的步…

如何使用mapXplore将SQLMap数据转储到关系型数据库中

关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具&#xff0c;该工具基于模块化的理念开发&#xff0c;可以帮助广大研究人员将SQLMap数据提取出来&#xff0c;并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…

贪心算法系列(二)|摆动序列最长递增子序列|买卖股票的最佳时机|买卖股票的最佳时机II

摆动序列 分析 最经典的做法还是使用两个dp表的动态规划(代码放下面)这里采用贪心算法&#xff0c;直接上结论整个序列中&#xff0c;波峰波谷起点和重点的个数就是整个最长的摆动序列长度 那么如何判断波峰/波谷呢&#xff1f;也很简单left nums[i] - nums[i-1]right nu…

JBPM4 JBDL Demo

JBPM4 JBDL Demo 工作流样例&#xff0c;工作流程定义文件

面向对象六大设计原则--依赖倒置

目录 六大原则 定义 概念 Java语言中的表现 优点 在设计模式中体现 工厂方法模式 观察者模式 状态模式 示例 手机模块设计 五个示例 一、读取数据 二、发送消息 三、支付方式 四、日志记录 五、数据持久化 使用汽车驾驶进行说明 依赖的三种写法 1.构造函数…

基于FPGA的温湿度检测

初始化部分就不过多赘述&#xff0c;我会给出对应的文件&#xff0c;我只说明这部分里面涉及到使用的代码部分 1、数据的读取和校验 数据的读取和检验代码如下 always (posedge clk_us)if (data_temp[7:0] data_temp[39:32] data_temp[31:24] data_temp[23:16] data_te…

SQLite3的使用

14_SQLite3 SQLite3是一个嵌入式数据库系统&#xff0c;它的数据库就是一个文件。SQLite3不需要一个单独的服务器进程或操作系统&#xff0c;不需要配置&#xff0c;这意味着不需要安装或管理&#xff0c;所有的维护都来自于SQLite3软件本身。 安装步骤 在Linux上安装SQLite…

AI数据分析:集中度分析和离散度分析

在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 读取Excel表格&#xff1a;"F:\AI自媒体内容\AI行业数据分析\toolify月榜\toolify2023年-2024年月排行榜汇总数据.xlsx&qu…

【PADS】软件下载安装、PADS—Altium Designer文件转换

PADS软件学习——软件下载、安装、解析 一、软件下载 PADS&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1J9z-Rl9sLjfnZYwlE3ZLPQ?pwdGLNG 提取码&#xff1a;GLNG解析软件&#xff1a;http://mentor.mr-wu.cn/PADS教学视频&#xff1a;https://www.bilibili.com/v…

“硝烟下的量子”:以色列为何坚持让量子计算中心落地?

自2023年10月7日新一轮巴以冲突爆发以来&#xff0c;支持巴勒斯坦伊斯兰抵抗运动&#xff08;哈马斯&#xff09;的黎巴嫩真主党不时自黎巴嫩南部向以色列北部发动袭击&#xff0c;以军则用空袭和炮击黎南部目标进行报复&#xff0c;双方在以黎边境的冲突持续至今。 冲突走向扑…

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

springboot 网上商城系统-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设网上商城系统。 本设…

HTTPS 代理的优点和缺点是什么?

HTTPS&#xff08;超文本安全传输协议&#xff09;作为一种基于HTTP加上SSL安全层的网络通信协议&#xff0c;已经成为互联网上广泛使用的IP协议之一。它在保证信息安全和隐私方面具有很多优势&#xff0c;但也存在一些缺点。接下来&#xff0c;我们就来探究一下HTTPS协议的优缺…

导致代理IP延迟高的原因

很多用户在使用代理IP进行网络访问时&#xff0c;可能会遇到代理IP超时的情况&#xff0c;也就是代理IP的延迟过高。代理IP延迟过高会影响用户的网络体验和数据获取效率。因此&#xff0c;了解代理IP延迟过高的原因很重要。以下是导致代理IP延迟过高的一些常见原因&#xff1a;…

相位和展开相位

相位 (Phase) 相位是一个周期信号在一个周期内的位置&#xff0c;通常以角度&#xff08;度或弧度&#xff09;表示。在许多应用中&#xff0c;相位被限制在一个周期内。例如&#xff0c;相位通常被限定在 −180∘到 180∘ 或 0∘ 到 360∘ 之间。 示例 −90∘ 表示信号在周…

fvcore库的一些功能和使用

目录 一、安装fvcore库 二、使用 fvcore是Facebook开源的一个轻量级的核心库&#xff0c;它提供了各种计算机视觉框架中常见且基本的功能。其中就包括了统计模型的参数以及FLOPs等。 项目地址&#xff1a;fvcore 一、安装fvcore库 pip install fvcore 二、使用 1、计算模…

【实物资料包】基于STM32智能台灯设计

【实物资料包】基于STM32智能台灯设计 需要资料的请在文章结尾获取哦~~~~&#xff08;如有问题私信我即可&#xff09; 1.介绍 1 添加wifi模块模块&#xff0c;可通过wifi模块APP或者手动按钮切换自动/手动模式 2 自动模式下&#xff0c;台灯可以感应是否有人落座&#xff0…

干货 | 准备换ERP系统?来看看这篇文章!

当前客户的痛点 在当今竞争激烈的市场环境中&#xff0c;企业面临着诸多挑战和痛点&#xff0c;尤其是在管理和运营方面。让我们以一家中小型制造业企业为例&#xff0c;探讨他们所面临的主要痛点&#xff1a; 分散的数据管理&#xff1a;企业各部门之间信息孤岛严重&#xff…