Java自定义注解

Java 自定义注解 Java自定义注解Java注解简介Java元注解自定义注解代码演示 本章点知识总览: 1、Java 注解简介 2、Java 元注解(重点) 3、自定义注解 4、Aop 自定义注解的应用(重点) Java注解(Annotation) 分类 编程技术 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制。 和Javadoc不同,Java标注可以通过反射获取标注内容。 ... 阅读详情
Java注解又称为标注,是Java从1.5开始支持的特殊语法元数据;Java中的类、方法、变量、参数、包都可以被注解。

元数据:描述数据的数据,对数据及信息资源的描述性信息。

1、注解仅仅是元数据,和业务逻辑无关,所以当你查看注解类时,发现里面没有任何逻辑处理;

2、javadoc中的@author、@version、@param、@return、@deprecated、@hide、@throws、@exception、@see是标记,并不是注解。


注解的作用:
1、在编译时进行格式检查:如果某个方法签名使用了@override,而它的父类里面并没有这个方法,此时编译器就会报错。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

2、减少工作量:大量重复的工作可以通过注解来减少工作量。


缺点:
1、业务类之间的关系不如XML配置那样一目了然
2、扩展性较差


Java SE5内置了三种,定义在java.lang中的注解:
1、@Override,表示当前的方法定义将覆盖超类中的方法;
2、@Deprecated,告知用户和编译器被标记的内容已不建议被使用,如果被使用,编译器会报警告,但不会报错,程序也能正常运行;
3、@SuppressWarnings,关闭不当的编译器警告信息

元注解
Java目前内置了三种标准注解(上面的),以及四种元注解,元注解专职负责注解 其他的注解。
@Target
表示该注解可以用于什么地方。可能的ElementType参数包括:
CONSTRUCTOR:构造器声明
FIELD:域声明(包括enum实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
(没指定的话可以放到任意地方)
@Retention
表示需要在什么级别保存该注解信息。参数有:
SOURCE:注解将被编译器丢弃(如:@Override、@SuppressWarnings)
CLASS:注解在class文件中可用,但会在VM中丢弃(默认值;如:@Deprecated)
                        RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解信息
@Documented
将此注解包含在Javadoc中(表示是否出现在API文档中)
@Inherited
允许子类继承父类中的注解

自定义注解
注解的特征:
使用关键字@interface ,注解不支持继承,不能使用extends来继承某个@interface。
注解类顶部会被@Documented、@Retention、@Tartget、@Inherited这四个元注解标记
其中@Tartget必须要有,其他可选
任何注解都离不开元注解(包括元注解自身如下@Target注解的代码,通过元注解可以自定义注解)。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}
使用@interface自定义注解时,就会自动继承java.lang.annotation.Annotation接口,同时不能继承其他的注解或接口。
Annotaion中的成员变量以方法的形式来定义,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
注解元素可用的类型如下:
1、所有基本数据类型(int、float、boolean等)
2、String
3、Class
4、enum
5、Annotation
6、以上类型的数组
如果使用了其他数据类型,编译器就会报错。(以上摘自《Java编程思想第4版》)

自定义注解的格式:
元注解
public @interface 注解名{
    定义体;
}
定义注解只能用public或者默认(default)这两个访问权修饰,例如String value();这里把方法设为default默认类型:
package com.fxp.annotation;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyFirstAnnotation {
	String value() default "";
}
注意:1、参数的默认值不能为null;
2、注解只有一个参数的时候,参数名必须取为value,且使用时可以忽略参数名和“=”。

注解元素必须有确定的值;要么指定时给默认值,要么使用时给值。不过有时候我们需要确定表达一个元素不存在值,所以使用空字符串或者负数表示某个元素不存在,在定义注解时,这已经成为一个约定用法。


自定义注解示例:


事先准备一个Person接口和Child实现类

package com.fxp.annotation.test;

public interface Person {
	
	String name();
	
	int age();

}
package com.fxp.annotation.test;

public class Child implements Person {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int age() {
		// TODO Auto-generated method stub
		return 0;
	}

}


定义一个注解类Description:

package com.fxp.annotation.test;

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

@Target({ElementType.METHOD,ElementType.TYPE})//作用域:在类和方法上可用
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
	
	String value();

}


在Child类上使用该注解:

package com.fxp.annotation.test;

@Description("I am Child Class annotation")
public class Child implements Person {

	@Override
	@Description("I am method annotation")
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int age() {
		// TODO Auto-generated method stub
		return 0;
	}

}


定义一个解析注解的类:

package com.fxp.annotation.test;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class ParseAnno {
	public static void main(String[] args) {
		
		try {
			//1、使用类加载器加载类
			Class c = Class.forName("com.fxp.annotation.test.Child");
			
			//2、找到类上面的注解
			boolean isExist = c.isAnnotationPresent(Description.class);
			if(isExist){//判断注解是否存在
				//3、拿到注解实例
				Description d = (Description) c.getAnnotation(Description.class);
				System.out.println(d.value());
			}
			
			//4、找到方法上的注解
			Method[] ms = c.getMethods();
			for(Method m : ms){
				boolean isMExist = m.isAnnotationPresent(Description.class);
				if(isMExist){
					Description d = m.getAnnotation(Description.class);
					System.out.println(d.value());
				}
			}
			
			//另外一种解析方法
			for(Method m : ms){
				Annotation[] as = m.getAnnotations();
				for(Annotation a : as){
					if(a instanceof Description){
						System.out.println(((Description) a).value());
					}
				}
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

解析的结果:

I am Child Class annotation
I am method annotation
I am method annotation

推荐视频地址:https://www.imooc.com/learn/456

用ESP32-S3和USB摄像头DIY一个无线图传监控(附完整代码和接线图) 本文详细介绍了如何利用ESP32-S3开发板和USB摄像头打造一套高性价比的无线图传监控系统。从硬件选型、接线图到代码实现,提供了完整的DIY方案,特别适合家庭监控、宠物看护等场景。通过优化WiFi传输和双核任务分配,实现了稳定的视频流传输,整套方案成本控制在200元以内。 阅读详情

相关推荐

使用运放构建电压跟随器

运放,是运算放大器的简称 运算放大器是用模拟电子器件(如晶体管,场效应管,二极管等)构成的模拟集成电路,其特点是有很高的放大倍数和抗干扰能力,因此可以被设计成各种用途的派生电路,如电压比较器、窗口电路、波形发生电路等等,其中也有电压跟随器。 电压跟随器是一种具有100%电压负反馈的放大器电路,其特点是输出电压的幅度和极性都与输入电压相同,所以叫跟随器。典型线路如图所示: 运放跟随器有输入阻抗高,而输出阻抗低的特性,一般来说,输入阻抗可以达到几兆欧姆,而输出阻抗低,通常只有几欧姆,甚至更低。 在电

Code for Coffee 5万+

java注解

java注解是附加在代码中的一些元信息, 用于一些工具在编译、运行时进行解析和使用, 起到说明、配置的功能(配合反射使用,通过反射读取解析注解的内容) public class Student{ @override public void test1(){ } } 自定义注解语法 public @interface 注解名 {定义体} ​ public @interface 注解名 { String value() default "默认值"...

m0_49151953的博客 784

新手必看:用FileZilla从武大IGS中心下载GNSS数据,再到crx2rnx转换的完整流程

本文详细介绍了新手如何通过FileZilla从武汉大学IGS中心下载GNSS数据,并使用crx2rnx工具将数据转换为RINEX格式的完整流程。涵盖工具准备、FTP连接、文件解压、格式转换及常见问题排查,帮助测绘和地信专业人员高效处理GNSS观测值数据。

weixin_29292431的博客 425

java @hide标签的学习

原来Java类、成员变量和方法注释有个@hide标签,作用就是不让外界调用public的此类、成员变量或者方法,接着再看,代码行数少了几行,还有一个竖杠,哈哈,然后把鼠标移动到行数空间或者竖杠位置,后来经过研究,原来需要把Java文件打包成.jar文件,依赖使用,于是,打成jar,据说,这是为了给系统APP调用的类、成员变量和方法,外界是不允许调用的;摸索了很久不得其解,最后问了几个朋友,有个基友给出了答案,牛x!行数空间那里出现了一个笔的图标,点它,@hide标签出现了,隐藏太深了;

Alex老夫子的专栏 2171

2022年全球市场微波等离子体CVD反应器总体规模、主要生产商、主要地区、产品和应用细分研究报告

据GIR (Global Info Research)调研,按收入计,2021年全球微波等离子体CVD反应器收入大约 百万美元,预计2028年达到 百万美元,2022至2028期间,年复合增长率CAGR为 %。

MARKETRESEARCH的博客 1137

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 2万+

Java基础——注解(Annotation)

一、什么是注解 注解(Annontation)是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。注解(Annontation)像一种修饰符一样,应用于包、类型、...

传臣、的博客 947

从零开始讲DDR(7)——modelsim独立仿真DDR4

本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。

apple_53311083的博客 3224

注解详解

注解详解 注释与注解 注释:解释代码 面向程序员 注解:对代码级别的说明 面向程序 概念 概念:它是JDK1.5及以后版本引入的一个特性 与类 接口 枚举 是在同一层次 它可以声明在包 类 字段 方法 局部变量 方法参数等的前面 用来对这些元素进行说明 注释 作用 作用:一个用来检测 一个是用来替代配置文件 简化配置文件的书写 常见的注解 常见的注解: @Override 用来检测这个方法 是不是重写父类的方法 @FunctionalInterface

cx9977的博客 315

【DRAM存储器五十七】LPDDR5介绍--read DQ training和WCK DQ training

简述LPDDR5训练中的读写DQ训练

highman110的博客 521

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第一期(真题+解析)| TCP、UDP的区别;程序局部性;ICMP协议及主要功能;重定位所需的计算机硬件

在当今信息化时代,军队中对于计算机专业人才的需求与日俱增。因此,了解面试和复试中常见的问题和要求对于准备应聘者来说至关重要。本文将围绕面试的准备要点、常见问题以及面试技巧进行探讨,并提供一些建议和经验。通过了解面试和复试的准备要点、常见问题以及技巧,读者将能够提升应对能力和成功率。本文为准备军队文职面试和计划考研复试的读者提供了有价值的参考和指导。通过阅读本篇博客,读者将能够获得关于军队文职计算机类面试和计算机考研复试的全面了解,提升自身的应对能力和成功率。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1690

【注解】02.自定义注解

Java自定义注解 学习注解,一是为了更好的理解和使用别人定义好的注解,二是自己自定义注解。下面将介绍如何自定义一个注解以及自定义注解的注意事项: 自定义注解时,需要使用@interface关键字,它将自动继承java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中

龙腾四海365的专栏 573

【深度学习基础】一篇弄懂训练集、验证集和测试集(呕心沥血版)

在深度学习中,训练集、验证集和测试集是构建和评估模型的核心组成部分。训练集用于模型的学习和参数优化,验证集帮助调整超参数和防止过拟合,而测试集则用于最终评估模型的泛化性能。正确划分和使用这三类数据集,对于开发高效、可靠的深度学习模型至关重要。本文将深入解析它们的作用、划分方法以及在实际应用中的注意事项,帮助你全面理解并掌握数据集的科学使用方法,从而提升模型的实际表现。

十二月的猫 3792

Java实现自定义注解

前言      上一篇文章介绍了注解的一些基本知识,这次来介绍下如何实现自定义注解及注解如何使用。 正文      注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。...

全力奔跑,梦在彼岸 10万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java中的注解以及自定义注解

1、Annotation(注解) 概述 (1)、注解起到标识做用,比如Junit的@Test注解。 Junit会在运行时检查方法上是否存在此注解,如果存在,就通过反射来运行你的方法。注意标红的反射两个字,反射在注解里相当重要,写完你的自定义注解类后没啥用,必须要用反射才能让它动起来!所以需要对反射有了解,感兴趣的小可爱可以看下这篇:Java中的反射机制介绍 (2)、从 JDK 5.0 开...

曹举的个人博客 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java注解以及自定义注解

Java注解以及自定义注解

YIYIYI 1968

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java自定义注解开发

一、JAVA注解 1、java注解的定义 Java注解是附加在代码中的一些元信息,用于一些工具在编译、 运行时进行解析和使用,起到说明、配置的功能。 注解相关类都包含在java.lang.annotation包中。 2、java注解的分类 2.1 JDK基本注解 2.1.1 @Override 重写 2.1.2 @Deprecated 已过时 2.1.3 @SuppressWarnings(value = ...

zxy15974062965的博客 7174

Java中自定义注解的使用

Java中自定义注解的使用

weixin_45565886的博客 3466

JAVA自定义注解以及应用

注解(Annotation)是 Java 5.0 引入的一种元数据形式。它提供了关于程序代码的额外信息,但本身不会直接影响程序的运行逻辑。自定义注解允许开发者定义自己的注解类型,用于标记类、方法、变量等程序元素,以传达特定的意图或提供配置信息。例如,可以定义一个自定义注解来标记需要进行性能监控的方法,或者标记一个需要进行权限验证的接口。

weixin_56693899的博客 1825

java如何自定义注解

一、什么是注解? 注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。 二、自定义注解需要的基本元素 自定义注解需要用到的东西: 修饰符:访问修饰符必须为public,不写默认为pubic; 关键字:关键字为@interface; 注解名称: 注解名称为自定义注解的名称,使用时还会用到; 注解类型元素: 注解类型元素是注解中内容,可以理解成自定义接口的

m0_58680865的博客 4767

Java 注解解析获取及自定义

从源码解析如何获取注解信息,以及如何自定义注解。

glb168的博客 2406

Java自定义注解详解

/ 注解属性声明@MyAnnotation(value = "测试", name = "张三", age = 25, roles = {"admin", "user"})// 方法实现// 当只有value属性需要设置时,可以简写@MyAnnotation("测试")// 方法实现// 字段验证注解// 可验证的接口Java 8引入了@Repeatable元注解,允许在同一元素上多次使用同一注解。// 单个角色注解// 角色容器注解使用合适的保留策略。

yk_dflkg的博客 2988

Java注解,元注解,自定义注解的使用

自定义注解,需要使用@interface来定义,使用@interface自定义注解时,自动继承java.lang.annotation.Annotation接口。权限修饰符 @interface 注解名 {// 定义内容 String value() default "";// 参数类型 参数名 默认值;@interface 用来声明一个注解其中上面的表示这个注解需要提供一个String类型的参数,且其默认值为空字符串default ""value() 就是参数的名称。

m0_63622279的博客 1909
上一篇: 【Java基础巩固一】修饰符、Object类、接口和抽象类
下一篇: Java中的final关键字
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值