[Java-基础] 注解
引言
在进行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-基础] 注解的更多相关文章
- Java基础—注解(转载)
概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...
- java基础-注解Annotation原理和用法
在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...
- Java基础—注解的使用
1.注解的概述: 注解是用来替代配置文件的!你回忆一下,我们以前总是要写一些配置文件,例如web.xml你还记得么?里面要写<servlet>和<servlet-mapping> ...
- Java基础——注解
一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...
- Java基础--注解Annotation
Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...
- java基础—注解annotation
一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...
- Java 基础 —— 注解
注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...
- Java基础--注解、反射
一.注解(Annotation) 1.什么是注解? 从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行 ...
- Java 基础 —— 注解 Annotation
简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...
- Java基础 - 注解详解
What - 什么是注解? Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...
随机推荐
- Python的一些常用知识
1.How to force urllib2 not to use a proxy Here is an example to remove proxy settings for all reques ...
- 《动手学深度学习》系列笔记—— 1.2 Softmax回归与分类模型
目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...
- 留学生如何把控好Essay写作结构
留学生在国内写过作文,但是对于essay写作到底了解多少呢?大家觉得essay写作太难是语言问题,但是大家要明白,老师对于内容的考察远重于对语言的考察.同学们的essay写作如果能做到言之有理,自圆其 ...
- Linux-课后练习(第二章命令)20200217-2
- VC控件-子类化控件技术
子类化一个Windows控件与子类化一个C++类不同,子类化一个控件要求你把一个窗口的一些或所有的消息映射都替换成自己的函数来响应,这样你就有效的阻止了控件去做系统默认的行为,而按自己的想法去做.子类 ...
- cf 187B.AlgoRace
floyd...太神奇了(不会floyd(大雾)) 貌似floyd的外层k是保证最短路从起点逐渐向外扩展(而不是乱搞233) 所以在处理f[i][j]=min(f[i][j],f[i][k]+f[k] ...
- 04-String——课后动手动脑
1.请运行以下示例代码StringPool.java,查看输出结果.如何解释这样的输出结果?从中你能总结出什么? public class StringPool { public static voi ...
- java课程课后作业190606之计算最长英语单词链
一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次.最长的定义是:最多单词数量,和单词中字母的数量无关. 统一输入文件名称:inp ...
- springboot (2.0以上)连接mysql配置
pom <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java&l ...
- Java enum应用小结
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...