java注解

转自:https://www.cnblogs.com/Jeremy95-Sze/p/13083306.html

注解的概念

注解是JDK1.5的新特性。

注解相当一种标记,是类的组成部分,可以给类携带一些额外的信息。

标记(注解)可以加在包,类,字段,方法,方法参数以及局部变量上。

注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。

注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,以后,javac编译器、开 发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种 标记,看你的程序有什么标记,就去 干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。

注解的作用

注解的作用就是给程序带入参数。

以下几个常用操作中都使用到了注解:

1. 生成帮助文档:

@author和@version

@author:用来标识作者姓名。

@version:用于标识对象的版本号,适用范围:文件、类、方法。

使用@author和@version注解就是告诉Javadoc工具在生成帮助文档时把作者姓名和版本号也标 记在文档中。

如下图:

2. 编译检查:

@Override @Override:用来修饰方法声明。

用来告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译失败。

如下图

常见注解

1. @author:用来标识作者名,eclipse开发工具默认的是系统用户名。

2. @version:用于标识对象的版本号,适用范围:文件、类、方法。

3. @Override :用来修饰方法声明,告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译 失败。

自定义注解

以上定义出来的注解就是一个最简单的注解了,但这样的注解意义不大,因为注解中没有任何内容,就好像 我们定义一个类而这个类中没有任何成员变量和方法一样,这样的类意义也是不大的,所以在定义注解时会 在里面添加一些成员来让注解功能更加强大,这些成员就是属性。接下来就看看怎么给注解添加属性。

注解的属性

1. 属性的作用 可以让用户在使用注解时传递参数,让注解的功能更加强大。

2. 属性的格式

格式1:数据类型 属性名();

格式2:数据类型 属性名() default 默认值;

3. 属性定义示例

属性适用的数据类型 八种基本数据类型(int,float,boolean,byte,double,char,long,short)

String类型,Class类型,枚举类型,注解类型

以上所有类型的一维数组

定义注解

使用注意事项

如果属性有默认值,则使用注解的时候,这个属性可以不用赋值。

如果属性没有默认值,那么在使用注解时一定要给属性赋值。

特殊属性value

1. 当注解中只有一个属性且名称是value,在使用注解时给value属性赋值可以直接给属性值,无论value是单 值元素还是数组类型。

如果注解中除了value属性还有其他属性,且至少有一个属性没有默认值,则在使用注解给属性赋值时, value属性名不能省略。

问题分析

现在我们已经学会了如何定义注解以及如何使用注解了,可能细心的同学会发现一个问题:

我们定义的注解是可以 使用在任何成员上的,比如刚刚Book注解的使用:

此时Book同时使用在了类定义上或成员方法上,编译器也没有报错,因为默认情况下,注解可以用在任何地 方,比如类,成员方法,构造方法,成员变量等地方。 如果要限制注解的使用位置怎么办?那就要学习一个新的知识点:元注解。接下来就来看看什么是元注解以 及怎么使用。

注解之元注解

1 元注解的概述

Java API提供的注解

专门用来定义注解的注解。

任何Java官方提供的非元注解的定义中都使用到了元注解。

常用元注解

@Target

@Retention

元注解之@Target

作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。

可选的参数值在枚举类ElemenetType中包括:

元注解之@Retention

作用:定义该注解的生命周期(有效范围)。

可选的参数值在枚举类型RetentionPolicy中包括

元注解使用示例

注解解析

什么是注解解析

通过Java技术获取注解数据的过程则称为注解解析。

与注解解析相关的接口 Anontation:所有注解类型的公共接口,类似所有类的父类是Object。

AnnotatedElement:定义了与注解解析相关的方法,常用方法以下四个

获取注解数据的原理

注解作用在那个成员上,就通过反射获得该成员的对象来得到它的注解。

如注解作用在方法上,就通过方法(Method)对象得到它的注解

如注解作用在类上,就通过Class对象得到它的注解

使用反射获取注解的数据

存在问题分析

TestAnnotation类在获取注解数据时处理得不够严谨,假如出现下面的其中一种情况:

1. 把BookStore类或成员方法buyBook上的注解删除。

2. 将Book注解的有效范围改为:CLASS。

再运行TestAnnotation类代码则会出现空指针异常

解决方案 在获取注解对象时,先判断是否有使用注解,如果有,才获取,否则就不用获取。

(0)

相关推荐

  • Java自定义注解

    前言# 随着springboot的流行,以前基于XML的spring配置用的越来越少,JavaConfig形式使用的越来越多,类似于: @Configurationpublic class AppCo ...

  • 关于Java你不知道的那些事之Java注解和反射

    作者:轻狂书生FS https://blog.csdn.net/LookForDream_/ 前言 我们在实际的工作中,项目使用的框架中会经常遇到注解和反射.但是我们大部分同学都仅仅限于知道这是注解和 ...

  • Java学习-注解和反射

    注解 java.Annotation Annotation的作用:可以呗其他程序读取 Annotation的格式 注解是:@注释名 在代码中存在,还可以添加一些参数 ​@SuppressWarning ...

  • Java零基础进阶篇之注解(二)

    在编写 toString()方法时,因为输入错误或其他的疏忽,将之写成 ToString()了,编译这个类时并不会出现任何的错误,编译器不会知道您是想重写 toString()方法,只会以为是定义了一 ...

  • 【Java面试题第六期】你对注解了解多少?

    首先注解是什么? Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法. Annatation(注解)是一个接口,程序可以通过反射来获取指 ...

  • 推荐一款 Java 零注解 API 文档生成工具

    smart-doc 是一款同时支持 java restful api 和 Apache Dubbo rpc 接口文档生成的工具,smart-doc 颠覆了传统类似 swagger 这种大量采用注解侵入 ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 为什么要选择学习Java?适合零基础的初学者的文章

    我经常收到这样的问题:"要学习的第一门编程语言是什么?" Java是一门好的编程语言吗?"和" Java是适合初学者的好的第一门编程语言,还是我应该从Java或 ...

  • Java高并发21-AQS在共享,独占场景下的源码介绍

    一.AQS--锁的底层支持 1.AQS是什么 AQS是AbstractQueuedSychronizer的简称,即抽象同步队列的简称,这是实现同步器的重要组件,是一个抽象类,虽然在实际工作中很烧用到它 ...