【JAVASE】注解

news2024/9/22 20:41:12

文章目录

  • 1.概述
  • 2.JDK内置注解
    • 2.1override注解
    • 2.2 Deprecated注解
  • 3.元注解
  • 4.注解中定义属性
    • 4.1 属性value
    • 4.2 属性是一个数组
  • 5. 反射注解
  • 6.注解在开发中的作用

1.概述

注解,也叫注释,是一种引用数据类型。编译后也同样生成class字节码文件。

  • 语法
[修饰符列表] @inteface 注解类型名 {
}
  • 使用
@注解类型名

可以出现在类上,属性上,方法上,变量上,注解类型上。

package com.sdnu.java.annotation;

public @interface MyAnnotation {
}
package com.sdnu.java.annotation;

@MyAnnotation
public @interface OtherAnnotation {
}
package com.sdnu.java.annotation;

/**
 * 注解1
 *
 * @author Beyong
 * @date 2023/03/02 11:42
 **/
@MyAnnotation
public class AnnotationTest01 {
    @MyAnnotation
    private int no;
    @MyAnnotation
    public AnnotationTest01(){

    }
    @MyAnnotation
    public static void m1(){

    }
    @MyAnnotation
    public void m2(){

    }
}

@MyAnnotation
interface MyInterface{

}

@MyAnnotation
enum Season{
    SPRING,SUMMER,AUTUMN,WINTER
}

2.JDK内置注解

2.1override注解

  • 只能注解方法
    进行编译检查,如果没有重写父类方法,则会编译器报错。
    在这里插入图片描述

2.2 Deprecated注解

用来标注已过时。

package com.sdnu.java.annotation;

/**
 * 注解Deprecated
 *
 * @author Beyong
 * @date 2023/03/02 20:11
 **/
public class AnnotationTest03 {
    public static void main(String[] args) {
        Test.myMethod();
    }
}

class Test{
    @Deprecated
    public static void myMethod(){
        System.out.println("hhh");
    }
}

在这里插入图片描述

3.元注解

用来标注注解类型的注解,叫做元注解。常见元注解

  • Target
    用来标记被注解可以出现在哪些位置上。
  • Retention
    在这里插入图片描述

4.注解中定义属性

package com.sdnu.java.annotation;

@MyAnnotation
public @interface OtherAnnotation {
    String name();
    String color();
    int age() default 20;
}

在这里插入图片描述

4.1 属性value

如果一个注解的属性名是value,则改属性名可以省略。

4.2 属性是一个数组

5. 反射注解

注解

package com.sdnu.java.annotation.annotation5;

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})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "北京";
}
package com.sdnu.java.annotation.annotation5;

/**
 * test
 *
 * @author Beyong
 * @date 2023/03/02 21:24
 **/
@MyAnnotation
public class MyAnnotationClassTest {
    int i;
    public MyAnnotationClassTest(){}
    @MyAnnotation
    public void doSome(){
        int i;
    }
}
package com.sdnu.java.annotation.annotation5;

/**
 * 反射注解
 *
 * @author Beyong
 * @date 2023/03/02 21:27
 **/
public class ReflectAnnotationTest{
    public static void main(String[] args) throws Exception{
        Class c = Class.forName("com.sdnu.java.annotation.annotation5.MyAnnotationClassTest");
        System.out.println(c.isAnnotationPresent(MyAnnotation.class));
        if(c.isAnnotationPresent(MyAnnotation.class)){
            MyAnnotation myAnnotation = (MyAnnotation) c.getAnnotation(MyAnnotation.class);
            System.out.println("类上的注解对象"+ myAnnotation);
            String value = myAnnotation.value();
            System.out.println(value);
        }
        Class stringClass = Class.forName("java.lang.String");
        System.out.println(stringClass.isAnnotationPresent(MyAnnotation.class)); //false
    }
}

在这里插入图片描述

6.注解在开发中的作用

Id类注解

package com.sdnu.java.annotation.annotation7;

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Id {
}

User类

package com.sdnu.java.annotation.annotation7;

/**
 * user
 *
 * @author Beyong
 * @date 2023/03/02 20:48
 **/
@Id
public class User {
    int id;
    String name;
    String password;
}

异常类

package com.sdnu.java.annotation.annotation7;

/**
 * 自定义异常
 *
 * @author Beyong
 * @date 2023/03/02 20:55
 **/
public class HasNotIdPropertyException extends RuntimeException {
    public HasNotIdPropertyException(){}
    public HasNotIdPropertyException(String s){
        super(s);
    }
}

测试类

package com.sdnu.java.annotation.annotation7;

import java.lang.reflect.Field;

/**
 * test
 *
 * @author Beyong
 * @date 2023/03/02 20:48
 **/
public class Test {
    public static void main(String[] args) throws Exception{
        Class userClass = Class.forName("com.sdnu.java.annotation.annotation7.User");
        boolean isOk = false;
        if (userClass.isAnnotationPresent(Id.class)){
            Field[] fields = userClass.getDeclaredFields();
            for(Field field : fields){
                if("id".equals(field.getName()) && "int".equals(field.getType().getSimpleName())){
                    isOk = true;
                    break;
                }
            }
            if(!isOk){
                throw new HasNotIdPropertyException("被标准的类必须有一个int类型的id属性");
            }
        }
    }
}

不改变上述代码:
在这里插入图片描述
改变User类中的int id 为其它,则出现:
在这里插入图片描述
在这里插入图片描述

作者:Beyong    
出处:Beyong博客
github地址:https://github.com/beyong2019

本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。

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

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

相关文章

QT获取dll库文件详细信息

一、需求背景获取软件下依赖的dll库的版本信息,如下图所示版本为1.0.7.1018二、实现方法2.1步骤windows下实现,基于version.lib(version.dll)提供的函数获取这些信息首先使用GetFileVersionInfoSizeA(W)获取VersionInfo的大小,申请缓冲区&…

团队API管理工具-YAPI

团队API管理工具-YAPI 推荐一款接口管理平台,操作简单、界面友好、功能丰富、支持markdown语法、可使用Postman导入、Swagger同步数据展示、LDAP、权限管理等功能。 YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接…

stm32智能家居+微信小程序接收控制

这里写目录标题项目介绍mqtt服务器相关知识![在这里插入图片描述](https://img-blog.csdnimg.cn/9ad065fb8fac48b1b975fc3a48b99763.png)下位机代码项目需要的一些开发工具项目介绍 本项目芯片使用STM32F103ZET6,微信小程序开发使用微信开发者工具。 stm32作为下位机&#xff…

【实现点击下载按钮功能 Objective-C语言】

一、实现点击下载按钮功能, 1.接下来,我们再实现另外一个功能,是什么,点击下载按钮吧: 点击下载按钮,是不是要有效果啊, 就是给大家实现这个功能, 首先,我们要实现单击这个效果,是不是要给按钮注册单击事件吧, 请问,这个按钮在哪里啊,是在控制器里面吗,不是,…

Spark性能优化一 概念篇

(一)宽依赖和窄依赖 窄依赖(Narrow Dependency):指父RDD的每个分区只被子RDD的一个分区所使用,例如map、filter等 这些算子一个RDD,对它的父RDD只有简单的一对一的关系,也就是说,RDD的每个part…

Linux 系统 /var/log/journal/ 垃圾日志清理

CentOS系统中有两个日志服务,分别是传统的 rsyslog 和 systemd-journal systemd-journald是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息,还有syslog的日志。systemd…

datax导入到hive的数据量翻倍

现象 mysql->hive 或者oracle->hdfs 源表数据100w 结果hive表数据200w。 这个现象很容易发生,只要你同一时间调度这个json两次。 原因 "writeMode" : "append", "nonconflict","truncate" * append&#xff…

无线WiFi安全渗透与攻防(二)之打造专属字典

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 打造专属字典 什么在破解之前先准备专用字典,因为对于一般家庭来说,常用 一个是预共享密钥PSK,一个是PIN码。 也不是所有的路由都开起了PIN码,一般都会开启域共享密钥…

【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现

🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 - 蓝…

盘点一下那些远程办公的神仙公司

其实远程办公已经有50多年的历史了,这几年,这种工作方式越来越受到大家的喜欢,对于员工来说,工作效率可以大幅提高,节省下来的通勤时间和成本,有更多的时间花在工作上。可以更好的平衡工作与生活。对于公司…

最近我的视频播放浅学总结

因为想做一个类似苹果的同播共享功能,这一段时间对音视频做了一些浅浅的学习,现简单总结记录。 我的需求是找到一个尽可能简单的方案来两人播放一段视频,并且能够进度和操作同步,所以基本不能有延迟,同时能够显示WebV…

12.1 基于Django的服务器信息查看应用(系统信息、用户信息)

文章目录新建Django项目创建子应用并设置本地化创建数据库表创建超级用户git管理项目(requirements.txt、README.md、.ignore)主机信息监控应用的框架搭建具体功能实现系统信息展示前端界面设计视图函数设计用户信息展示视图函数设计自定义过滤器的实现前…

华为OD机试用Python实现 -【广播服务器】

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲广播服务器题目输入输出示例一输入输出示例二输入输出Python代码代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题

常见的电脑运行卡顿原因及解决方法

大家在日常使用电脑过程中,会发现多开几个文件就卡顿,其实很多时候都跟C盘长期不清理有关,C盘的内存被下载的软件安装包、页面文件、休眠文件、更新文件等一系列的文件占据。大的文件甚至能占到20-30G,驱动人生就为大家带来几种解…

App防抓包的四种绕过方法(详细)

App防抓包的四种绕过方法简介:1、ssl证书校验(https证书校验http请求ssl证书校验)方法演示:安卓5.0怎么安装证书演示:安卓7及以上怎么把证书安卓到系统目录2、代理屏蔽3、证书绑定 (SSL pinning&#xff09…

Easyrecovery数据恢复软件工作原理及使用介绍教程

Easyrecovery是一款强大的数据恢复软件,它专门解决磁盘数据恢复问题。在计算机世界里,数据丢失经常是一件令人头疼的事情,但是有了Easyrecovery,您可以放心大胆地享受数据备份和恢复的乐趣。EasyRecovery使用Ontrack公司复杂的模式…

(JUC)核心线程 和 救急线程的区别;Executors-固定大小线程池单线程线程池

核心线程 和 救急线程的区别 救急线程是有个生存时间的,它执行完任务了,过了一段时间,没有新任务了,救急线程就会销毁掉,变成结束的状态 核心线程没有生存时间,它执行完任务后,它仍然会被保存…

人机交互(软件工程视角)第一、二章部分题目答案

我认为日常生活中,我们学校的选课系统就在选课的时候就很不方便,具体是这样的,因为本来我们学校的选课的时候服务器负载能力就比较差,大家着急忙慌地选课的时候,很容易因为界面选课控件比较小,从而直接点击…

软测入门(四)Appium-APP移动测试基础

Appium 用来测试手机程序。 测试方面: 功能测试安装卸载测试升级测试兼容测试 Android系统版本不同分辨率不同网络 网络切换、中断测试使用中来电话、短信横竖屏切换 环境搭建 Java安装(查资料)Android SDK安装,配置 HOME和P…

FPGA纯verilog手写HDMI发送IP 提供源码和技术支持

目录1、前言2、设计思路和框架TMDS 编码算法OSERDESE串并转换3、顶层源码和IP封装4、源码和IP获取1、前言 本设计使用Xilinx原语和自己手写的代码实现了HDMI发送功能,纯verilog手写,有源码,也提供封装好的IP,你喜欢用例化的方式就…