引言

在进行Spring Boot 入门的时候,主程序需要@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用。这个的作用是什么?去掉的话会报错。如果单写这个不引入头文件也会报错,这说明这个东西是有意义的,会被编译器识别。当点进去,发现它又包括了很多个注解。

本着负责任的态度,来探究一下注解是什么。

注解的概念

  • 注解:Annotation 是从JDK5.0开始引入的新技术
  • Annotation 的作用:
    • 并不是程序本身,他可以对程序做出某种解释。这一点跟注释有点像
    • 但是注解可以被其他程序(比如:编译器)所读取。注释不会被注解读取。
  • Annotation 的格式:
    • 通常是以@注释名在代码中存在的,还可以添加一些参数值:例如:@SuppressWarnings(value='unchecked')
  • Annotation 的使用:
    • 可以附加在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
    • ps:学长曾说反射机制一定要理解,这个应该很重要。

内置注解

@Ovrride

public class zhujie /*extends Object*/{
@Override
public String toString(){
return "hello";
}
}

这里重写的是Object里的toString方法,加上@Ovrride什么意思呢?

@Ovrride就是一个注解,表示这个方法是重写了父类方法。但是如果这么写:

public class zhujie /*extends Object*/{
@Override
public String tostring(){
return "hello";
}
}

就会报错。

@Override并没有实际的作用,不写也是可以的,但是写上有以下好处:

  • 可以当注释用,表示这个方法名是父类有的
  • 编译器也可以识别,如果没有就会报错。所以加上编译器就会帮你检查方法的正确性。

@Deprecated

这个注解表示不推荐使用,但还是可以用的。

一个横线代表不推荐。

@SuppressWarnings

这个感觉真的太有用了。在写代码的时候重视会出现警告,但是有些警告多了反而麻烦。

这个注解上文说过是带参数的。

具体用法可以看这篇博客:https://www.cnblogs.com/perfei456/p/8962167.html

自定义注解

@Override打开,可以看到注解的格式:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target({ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

自己写的注解跟这格式差不多,可能比这复杂

元注解

元注解的作用就是负责注解其他注解。Java定义了4个标准的meta-annotation类型,用来提供对其它annotation类型作说明

比较常用的是上面出现的@Target,@Retention

  • @Target

    它的作用就是用来描述注解的使用范围,比如说是可以修饰类,还是可以修饰方法的

  public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
/** 用于描述类、接口(包括注解类型)或enum声明*/
TYPE, /** Field declaration (includes enum constants) */
/** 用于描述域 (包括enum常量)*/
FIELD, /** Method declaration */
/** 用于描述方法 */
METHOD, /** Formal parameter declaration */
/** 用于描述参数 */
PARAMETER, /** Constructor declaration */
/** 用于描述构造器 */
CONSTRUCTOR, /** Local variable declaration */
/** 用于描述局部变量 */
LOCAL_VARIABLE, /** Annotation type declaration */
/** 用于描述注解 */
ANNOTATION_TYPE, /** Package declaration */
/** 用于描述包 */
PACKAGE, /**
* Type parameter declaration
* 用于描述参数类型
* @since 1.8
*/
TYPE_PARAMETER, /**
* Use of a type
*类型的使用
* @since 1.8
*/
TYPE_USE
}

如果用于描述方法的结果放在类前面,那么就会报错

  • 如果要多个参数也是可以的

@Target(value = { ElementType.METHOD,ElementType.TYPE})

  • @Retention

    Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE

    按生命周期来划分可分为3类:

    取值 作用
    SOURCE 只在源文件中有效
    CLASS 在class文件中有效
    RUNTIME 在运行时有效,为runtime可以被反射机制读取

    在注解里定义的每一个方法实际上是声明一个配置参数。

  public @interface SetAnnotation {
/*参数类型 参数名()*/
String f();
/*如果不加default,那么前面必须传一个参数*/
/*可以通过default来声明参数的默认值*/
String f() default "";
int age() default 0;
}

注解元素必须要有值,在定义注解元素的时候,经常使用空字符串,0作为默认值,也经常使用负数表示不存在的含义。

结语

但是注解如果只是定义了参数并没有用,还需要通过反射或其他程序去解析这些注解才有用。

现在只是暂时学习了语法。

[Java-基础] 注解的更多相关文章

  1. Java基础—注解(转载)

    概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...

  2. java基础-注解Annotation原理和用法

    在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...

  3. Java基础—注解的使用

    1.注解的概述: 注解是用来替代配置文件的!你回忆一下,我们以前总是要写一些配置文件,例如web.xml你还记得么?里面要写<servlet>和<servlet-mapping> ...

  4. Java基础——注解

    一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...

  5. Java基础--注解Annotation

    Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...

  6. java基础—注解annotation

    一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...

  7. Java 基础 —— 注解

    注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...

  8. Java基础--注解、反射

    一.注解(Annotation) 1.什么是注解? 从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行 ...

  9. Java 基础 —— 注解 Annotation

    简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...

  10. Java基础 - 注解详解

    What - 什么是注解?        Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...

随机推荐

  1. nodejs - fs模块 - 文件操作

    1, fs.stat  检测是文件还是目录 2, fs.mkdir 创建目录 var fs = require('fs') fs.mkdir('./dir',function(err){ if(err ...

  2. 145-PHP 使用<<<和HTML混编(一)

    <?php $html=<<<TEMP1 <title>PHP输出HTML代码</title> <body> <a href=#> ...

  3. zerone 01串博弈问题

    近日领到了老师的期末作业 其中有这道 01 串博弈问题: 刚开始读题我也是云里雾里 但是精读数遍 “细品” 之后,我发现这是一个 “动态规划” 问题.好嘞,硬着头皮上吧. 分析问题:可知对每个人有两手 ...

  4. 控制数据的小数位数 java / js

    //java一般控制格式都是通过 DecimalFormat 来控制的.下边是个例子. import java.text.DecimalFormat; public class ControlBit ...

  5. 如何通过模仿提升Paper写作能力?

    对于大部分初到国外留学的中国留学生们来说要想自己独立完成一篇Paper可能难度会很大,从Paper字体字号要求.Paper写作格式.Paper写作结构等等诸多因素都会影响留学生们写Paper的效率.对 ...

  6. MyBatis从入门到精通(第3章):MyBatis注解方式的基本使用

    MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马录制的2018年双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作  有使用MyBatis注解进行多表 ...

  7. 尝试用kotlin做一个app(五)

    JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前 ...

  8. 使用Linux系统,是一种什么体验?

    导读 同事,从事嵌入式软件开发多年,主要开发环境用的就是linux,最疯狂的一段时间直接把系统装成linux系统,然后在linux下面虚拟一个windows操作系统,主要有些事情必须在windows才 ...

  9. 关于Wasserstein GAN的一些笔记

    这篇笔记基于上一篇<关于GAN的一些笔记>. 1 GAN的缺陷 由于 $P_G$ 和 $P_{data}$ 它们实际上是 high-dim space 中的 low-dim manifol ...

  10. 1.6判断类型toString.call()

    之前我都是使用typeof,后来发现它的判断有局限,例如(){}obeject.p.toString.call()解决了 obj.toString()的结果和Object.prototype.toSt ...