- 听到注解这堂课,想起曾在微信公众号里
- 夜深了,源代码里突然来了一个新朋友!">看过一篇挺有意思的分享——夜深了,源代码里突然来了一个新朋友!
听到注解这堂课,想起曾在微信公众号里
看过一篇挺有意思的分享——夜深了,源代码里突然来了一个新朋友!
[Annotation]
注释
描述 | 表现形式 | 快捷键 |
---|---|---|
单行注释 | // | CTRL+/ |
多行注释 | / / | CTRL+SHIFT+/ |
文档注释 | /* / | /** + 回车(Enter) |
注解
Java注解(Annotation)又称Java标注,是JDK5.0开始引入的一种全新机制。 依赖于Java强大的反射机制,通过给代码“打标签”,然后在运行时动态获取这一思想,开启了一种全新的编程体验。 注解是Java语言中一个非常强大且有用的存在,它像一种神奇的胶水,将代码模块粘合在一起,让Java编程越发的像组装积木一样方便简单。
一、注解的写法:@XXX [(一些信息)]
二、注解放置在哪里:类、方法、属性、构造、变量、参数(前面)
三、注解的作用
1.用来充当注释的作用,例如:@Deprecated
2.用来做代码的检测(验证),例如:@Override
*3.可以携带一些信息(内容),例如:文件.properties .xml 注解
四、、Java中已定义好的注解:
@Deprecated | 用来说明方法是废弃的 |
---|---|
@Override | 用来做代码检测此方法是否重写 |
@SuppressWarnings(信息) | 去掉程序中的警告 |
unused | 变量定义后未被使用 |
serial | 类实现了序列化接口,但不添加序列化ID号 |
rawtypes | 用来提示集合没有定义泛型 |
deprecation | 方法已废弃 |
unchecked | 出现了泛型的问题,可以不检测 |
all | 包含了以上所有(不推荐使用) |
五、注解中可以携带信息,也可以不携带信息。
如果携带了信息,则信息不能随意填写,信息的类型只能是如下的类型:
①.基本数据类型 |
---|
②.String类型 |
③.枚举类型enum |
④.注解类型@ |
⑤.数组类型[] 数组的内部需要是如上的四种类型 |
六、如何自己描述一个注解类型?
1.通过@interface 定义一个新的注解类型
2.发现写法与接口非常相似(可以利用接口的特点来记忆注解)
可以描述public static final的属性,不常用,比较少见
可以描述public abstract的方法,方法要求必须有返回值,且返回值类型是‘5’的那些
3.若要使用自定义的注解
光定义还不够,还需要做很多细致的说明(需要利用Java提供好的注解来说明)
元注解(也是注解,不是拿来使用的,是用来说明注解)
@Target(目标) 描述当前的注解可以放置在哪里
@Retention(保留) 描述当前的注解的作用域
源代码文件—->编译—->字节码文件—->加载—->内存执行
SOURCE CLASS RUNTIME
@Inherited(继承) 描述当前的注解是否能被子类对象继承
@Document(文档) 描述当前的注解是否能被文档所记录
4.自己使用自己描述的注解
问题1. 在注解里面描述了一个没有参数,有返回值String[]的方法,
但在使用注解时,它让我们再次传递参数
可理解为:注解的方法是做事的,它将我们传递给他的参数搬运给了别人
@MyAnnotation(test=”abc”)
问题2. 使用别人写好的注解不用写方法名,而我们自定义的方法必须写名字
如果我们自定义的注解只有一个方法,且方法名叫value
那么在使用的时候,就可以省略方法名。
如果传递的信息是一个数组类型,数组内只有一个元素,可以省略{}
如果有两个以上的方法,每个方法都必须写名字。
七、如何解析注解内携带的信息,需要反射机制来帮忙
八、注解应用场景