1. 注解
1.1 什么是注解
注解:
Java语言中的类、方法、变量、参数和包等都可以被标注。
和Javadoc不同,Java标注可以通过反射获取标注内容。
在编译器生成类文件时,标注可以被嵌入到字节码中。
Java虚拟机可以保留标注内容,在运行时可以获取到标注内容。
当然它也支持自定义Java标注
JDK1.5之后的特征:
用于说明程序
一般在框架中使用
格式:
@AnnotationName
文档注释:
@param @return @Exeception 从根本上是一个注释,不存在代码编译
不会生成对应的.class字节码问题,只是提供给JavaDoc API文件生成工具。
作为标记生成对应的文档。
注解是有一部分参与编译
@Override并不是没编译就有效果了
是因为不管是Eclipse还是IDEA都可以预编译Java代码生成对应的.class文件的
1.2 作用
生成文档:
代码中生成对应的JavaDoc API文档
@param @return
【IDEA JavaDoc工具使用参数】
Other Command Line Arguments : -encoding utf-8 -charset utf-8
解决中文乱码,因为IDEA默认编码集为UTF-8 Windows GKB
代码检查:
继承重写,或者说接口遵从之后的实现中,存在@Override
代码数据获取: [小框架]
通过反射获取指定注解中的一些内容
1.3 Java中预定义的一些注解
@Override:
重写/实现方法的情况下,检查方法声明是否和父类或者接口中的方法声明一致。强制格式检查。
@Deprecated
标注当前方法已过时,例如 Data日期类内的一些方法
@SuppressWarnings("all")
压制警告,可以用于一些代码中存在明确无异常的情况下,压制一些警告
2. Java中自定义注解
2.1 Java中自定义注解的方式
格式:
public @interface AnnotationName {
属性列表;
}
Annotation注解是可以编译得到对应的.class字节码文件,验证了注解是可以参与编译过程的
通过反编译工具可以得到一下内容
【Annotation本质】
public interface MyAnnotation1 extends java.lang.annotation.Annotation {
}
MyAnnotation1
本质是一个interface,同时java.lang.annotation.Annotation 子接口
2.2 Annotation注解属性
属性:
开发书写代码使用注解的方式中,数据使用方式更加偏向于属性概念。
使用
1. 在书写代码中使用
@MyAnnotation(id=1, name="骚磊", age=16)
2. 利用反射时,会涉及到getXXX方法
通过属性名获取对应值的概念来完成的
【但是实际上是利用abstract方法来完成属性概念的】
属性使用的格式[实际按照方法格式操作]
1. 属性的值数据类型和对应具体数据 ==> 返回值类型和返回的数据
属性类型支持:
a. 基本数据类型
b. String类型
c. 其他的注解类型
d. 枚举类型
枚举就是一个带有名字的常量,为了更好的域阅读性和操作
e. 以上类型对相应的数组
属性值要求
a. 定义属性时可以使用default关键字,加上默认值,该属性在使用的过程中是
没有强制要求属性值,如果没有赋予属性值,采用对应的默认值操作,如果赋
值,使用对应值
b. 如果注解中有且只有一个value属性,或者说注解中除value属性之外,都有
默认值,不管是类,方法,成员变量,包使用当前注解是可以直接在括号内加入
对应数据类型数值、
c. 如果属性是数组类型, {}大括号保存,并且不同的内容,使用,隔开
2. 属性的键名字 ==> 方法的名字
2.3 元注解
【重点】
@Target目标
可以作用范围 类,方法,成员变量...
@Retention
RetentionPolicy.RUNTIME 常用
3. 注解使用总结
1. 注解以后大多数情况下,都是使用过程,而不是自定义,会使用到框架中预处理好的注解。
2. 注解是给谁用的?
a. 编译器
b. 解析代码使用
c. JVM运行代码使用
3. 注解是一个标签,有时候是做标记的,有时候标签是有属性的。