1,什么是注解:

从JDK5开始,Java增加了对元数据 (MetaData)的支持,也就是Annotation注解,这种注解与注释不一样,注解其实是代码里的特殊标记,这些标记可以在编译、类加载 运行时被读取并执行相应的处理。通过使用注解,程序开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
注解提供了一种为程序元素设置元数据的方法,从某些方面来看,注解就像修饰符,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被存储在注解 "name=value"对中。
注解能被用来为程序元素(类、方法、成员变量等)设置元数据。值得指出的是,注解不影响程序代码的执行,无论增加、删除注解,代码都始终如一地执,如果希望让程序中的注解在运行时起一定的作用,只有通过某种配套的工具对注解中的信息进行访问和处理,访问和处理注解的工具统称APT,也就是Annotation Processing Tool的缩写。

2,Java5的常用的基本注解:

(1),重写父类方法注解@Override:

该注解作用在一个方法上,告诉编译器检查该该方法是不是一个重写父类的方法。这个注解的作用主要是为了帮助程序员屏蔽一些低级错误,比如,我们有一个方法叫做info,有的程序员可能就直接写成了inf或者inf0,到时候排查的时候,也不太方便,如果在编译的时候就能把这个错误报出来就是最好的。
子类重写父类方法,请必须加@Override注解

(2),标记过时@Deprecated:

该注解也是作用在一个类或者方法上,表示一个类或者方法是不是已过时的,如果在其他程序里使用了已过时的类或者方法,编译器会给出警告。
java9开始为Deprecated提供了两个新的属性:
  • forRemoval: boolean 类型的属性指定该API在将来是否会被删除
  • since: String 类型的属性指定该API从哪个版本被标记为过时

(3),取消告警@SuppressWanings:

@SuppressWanings指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,@SuppressWanings一直作用于该程序元的所有子元素。
比如我们的集合框架如果没有使用泛型就会造成编译告警。不过V哥觉得,我们应该尽量不适用这个注解。我们应该解决掉程序开发中所有的告警。

(4),函数式接口@FunctionalInterface

自定义注解

元注解

元注解就是修饰注解的注解。java中定义了6个元注解。本节课我们先介绍常用的元注解。

1,@Retention

只能用于修饰注解定义,用于指定被修饰的注解的生命周期,
@Retention包含一个@RetentionPolicy类型的value成员变量,所以使用@Retention时必须为该value成员变量指定值。
value 成员变 的值只能是如下
  • RetentionPolicy.CLASS: 编译器将把注解记录在class文件中,当运行Java程序时JVM不可获取注解信息。这是默认值
  • RetentionPolicy.RUNTIM: 编译器将把注解记录在class文件中,当运行 Java程序时JVM可获取注解信息,程序可以通过反射获取该注解信息
  • RetentionPolicy.SOURCE: 注解只保留在源代码中,编译器直接丢弃这种注解
 

2,@Target

@Target 也只能修饰注解定义,它用于指定被修饰的注解能用于修饰哪些程序单元@Target 元注解也包含一个名为 value 的成员变,该成员变量的值只能是如下几个:
  • ElementType.ANNOTATION_TYPE: 指定该策略的注解只能修饰注解。
  • ElementType.CONSTRUCTOR: 定该策略的注解只能修饰构造器。
  • ElementType.FIELD: 指定该策略的注解只能修饰成员变量。
  • ElementType.LOCAL_VARIABLE: 定该策略的注解只能修饰局部变量
  • ElementType.METHOD: 指定该策略的注解只能修饰方法定义。
  • ElementType.PACKAGE: 指定该策略的注解只能修饰包定义。
  • ElementType.PARAMETER: 指定该策略注解可修饰参数
  • ElementType.TYPE: 定该策略的注解可以修饰类、接口(包括注解类型)或枚举定义

3,@Documented

@Documented 用于指定被该元注解修饰的注解类将被javadoc工具提取成文档,如果定义注解类时使用了@Documented修饰,则所有使用该注解修饰的程序元素的 API 文档中将会包含该注解说明
 

4,@Inherited

@Inherited元注解指定被它修饰的注解将具有继承性,如果某个类使用了@Xxx注解(定义该注解时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。
 
 
创建注解
1,创建一个最简单的注解
public @interface MyAnnotation { }
 
2,使用刚刚创建的注解:
@MyAnnotation public class MyClass { }
在默认情况下,注解可以修饰任何的程序元素,包括我们的类,接口,方法等等。所以我们定义的MyAnnotation注解,它可以修饰任何的程序元素。
 
3,带成员变量的注解,成员变量在注解中的定义以无参方法的形式来声明
我们的注解的成员变量的类型,只能是基本数据类型和String,元数据类型,注解类型以及其对应的数组。
package com.zmd.myAnnotation;

public @interface MyAnnotation {
String name();
int age() ;
}
如果添加了成员变量,那么使用的时候可以是如下格式:
package com.zmd.myAnnotation;

@MyAnnotation(name = "hehe",age = 1)
public class MyClass {
}
4、还可以给注解的属性加上默认值:
package com.zmd.myAnnotation;

public @interface MyAnnotation {
String name() default "zmd";
int age() default 22;
}
如果加上了默认值之后,我们可以不对name和age赋值了。如果不复制,那么使用的就是默认值。
 
 

java 编程基础:注解的功能和作用,自定义注解的更多相关文章

  1. Java入门——(1)Java编程基础

    Java入门--(1)Java编程基础 第二章 Java编程基础   JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 }   2.1关键字:赋予了特殊含义的单词.   2.2标识符: ...

  2. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  3. Java开发知识之Java编程基础

    Java开发知识之Java编程基础 一丶Java的基础语法 每个语言都有自己的语法规范.例如C++ 入口点是main. 我们按照特定格式编写即可. Java也不例外. Java程序的语法规范就是 Ja ...

  4. Java编程基础-面向对象(中)

    本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...

  5. Java编程基础——流程控制

    Java编程基础——流程控制 摘要:本文主要介绍Java编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...

  6. java编程基础二进制

    0.java编程基础 01.二进制(原码,反码,补码) 02.位运算 03.移位运算符 二进制 原码,反码,补码 1.基本概念 二进制是逢2进位的进位制,0,1是基本算符. 现在的电子计算机技术全部使 ...

  7. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  8. Java编程基础——运算符和进制

    Java编程基础——运算符和进制 摘要:本文主要介绍运算符和进制的基本知识. 说明 分类 Java语言支持如下运算符: ◆ 算术运算符:++,--,+,-,*,/,%. ◆ 赋值运算符:=,+=,-= ...

  9. Java编程基础——常量变量和数据类型

    Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...

  10. Java编程基础——标识符和关键字

    Java编程基础——标识符和关键字 摘要:本文主要介绍标识符和关键字. 标识符 是什么 Java语言中,为各种变量.方法.类和包等起的名字,统统称之为Java标识符. 命名规则 ◆ 应以字母.下划线. ...

随机推荐

  1. C/C++ Qt TableWidget 表格组件应用

    TableWidget 表格结构组件,该组件可以看作是TreeWidget树形组件的高级版,表格组件相比于树结构组件灵活性更高,不仅提供了输出展示二维表格功能,还可以直接对表格元素直接进行编辑与修改操 ...

  2. c语言实参与形参的区别

    1 #include<stdio.h> 2 #include<math.h> 3 4 /** 5 * 形参和实参的功能是作数据传送. 6 * 函数调用中发生的数据传送是单向的. ...

  3. [NOI 2014]起床困难综合症[二进制]

    背景 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...

  4. 洛谷 P6349 - [PA2011]Kangaroos(KDT+标记下放)

    洛谷题面传送门 KDT 上打标记的 hot tea. 考虑将询问 \(A,B\) 看作二维平面直角坐标系上的一个点 \((A,B)\),那么我们这样考虑,我们从左到右扫过全部 \(n\) 个区间并开一 ...

  5. AT695 マス目

    AT695 マス目 本题选自 DP 优化方法大杂烩 状压部分. 这个题很 nb.下文记 \(n=H\),\(m=W\). 对于每一列,如果只记录一个格子是否为黑色,那么发现它无法处理从右边绕到左边再绕 ...

  6. [R] 添加误差棒的分组折线图:geom_path: Each group consists of only one observation. Do you need to adjust the...

    想做一个简单的分组折线图,并添加误差棒,类似下面这样的: 用ggplot似乎很简单就能实现:ggplot+geom_errorbar+geom_line+geom_point,重点在于计算误差棒. 还 ...

  7. c6和c7

    Centos6.x普遍采用 ext3\ext4(Fourth EXtended filesystem)文件系统格式, EXT3 支持的最大 16TB 文件系统和最大 2TB 文件 Ext4 分别支持1 ...

  8. R连接mysql数据库方法详解

    Warning messages: 1: In odbcDriverConnect("DSN=Rdata;UID=root") : [RODBC] ERROR: state IM0 ...

  9. 生产调优1 HDFS-核心参数

    目录 1 HFDS核心参数 1.1 NameNode 内存生产配置 问题描述 hadoop-env.sh中配置 1.2 NameNode 心跳并发配置 修改hdfs-site.xml配置 1.3 开启 ...

  10. 日常Java 2021/10/17

    今天开始Javaweb编译环境调试,从tomcat容器开始,然后mysql的下载,连接工具datagrip,navicat for mysql,然后就是编写自己的sql,安装jdbc,eclipse连 ...