本篇文章小编给大家分享一下Java中三种标准注解和四种元注解代码说明,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
先来说说什么是注解
注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。
注解的语法比较简单,除了@符号的使用之外,它基本与Java固有的语法一致。
Java内置了三种注解,定义在java.lang中的注解
@Override:表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。
@Deprecated:如果程序员使用了注解为它的元素,那么编译器会发出警告信息。
@SuppressWarnings:关闭不当的编译器警告信息。在java SE5之前的版本中,也可以使用该注解,不过会被忽略不起作用。
我们来看一下注解@Test的定义:
定义注解时,会需要一些元注解(meta-annotation),如@Target和@Retention。
@Target用来定义你的注解将应用于什么地方(例如是一个方法或者一个域)。
@Retention用来定义该注解在哪一个级别可用,在源代码中(SOURCE)、类文件中(CLASS)或者运行时(RUNTIME)。
Java除了内置了三种标准注解,还有四种元注解
@Target表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括:
ElemenetType.CONSTRUCTOR构造器声明
ElemenetType.FIELD域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE局部变量声明
ElemenetType.METHOD方法声明
ElemenetType.PACKAGE包声明
ElemenetType.PARAMETER参数声明
ElemenetType.TYPE类,接口(包括注解类型)或enum声明
@Retention表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:
RetentionPolicy.SOURCE注解将被编译器丢弃
RetentionPolicy.CLASS注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIMEVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
@Inherited允许子类继承父类中的注解。
元注解和自己写一个注解
一、元注解
@Target表示这个注解可以用在什么地方
@Retention表示我们的注解在什么地方还有效(runtime>class>sources)
@Documented表示是否将我们的注解生成在javaDoc中
@Inherited子类可以继承父类的注解
package com.epoch.customproject.utils; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented public @interface DataSource { String value() default "dataSourceMdm"; }
二、自己写注解
public class test { @Myobject2(age = 18) public void test1(){ } @Myobject("默认") public void test2(){ } } @Target(value = {ElementType.TYPE,ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @interface Myobject{ //只有一个参数,所以传一个值就行 @Myobject("默认") String value(); } @Target(value = {ElementType.TYPE,ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @interface Myobject2{ // @Myobject2(age = 18) 其他参数不用传的原因是给过默认值 //注释的参数 参数类型 参数名() String name() default "默认名字"; int age() ; double height() default -1;//如果默认值-1,代表不存在 String[] school() default {"默认学校1","默认学校2"}; }
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整