一、什么是注解?
注解: 它是程序看,当程序看到这个注解时,就会解析它。
注解的分类:
1. 预定义注解
2. 自定义注解
3. 元注解
使用或者不适用注解的区别:
注解本身没有任何意义,它只有被解析了,才会赋予真正的意义。
我们后会使用反射来对象注解进行解析。
像:@Override 它被JVM解析,从而使其具有相应的意义。
@Controller @RequestMapping 它被Spring框架解析,所以具有相应的意义。
二、预定义注解
预定义注解就是JDK自带的一些注解,该注解被JVM而解析。
1. @Override: 重写得注解。符合重写得规则。
2. @Deprecated: 表示已过时。
3. @SuppressWarnings: 表示压制警告。
4. @FunctionInterface: 表示函数式接口。表示该接口中有且仅有一个抽象方法。
例子:
public class Test01 {
public static void main(String[] args) {
GetTime getTime=new GetTime();
getTime.getNow();
}
}
//预定义注解4种
/* 1. @Override: 重写得注解。符合重写得规则。
2. @Deprecated: 表示已过时。
3. @SuppressWarnings: 表示压制警告。
4. @FunctionInterface: 表示函数式接口。表示该接口中有且仅有一个抽象方法。
*/
//函数式接口,该接口有且仅有一个抽象方法
@FunctionalInterface
interface Usb{
//唯一抽象方法
public void show();
//默认方法
default void fun(){}
}
class KeyBoard implements Usb{
//重写的注解,一定要符合重写规则
@Override
public void show() {
}
}
class GetTime{
//过时的注解
@Deprecated
public void getNow(){
}
}
三、自定义注解
自定义注解语法:
public @interface 注解名{
//注解属性
}
如何使用自定义注解:
类 方法 属性 加@注解名
注解中的属性
@interface 注解名{
数据类型 属性名() default 默认值;
}
数据类型: 基本类型,字符串类型,枚举类型【常量】,注解类型,数组类型【必须是上面这些类型的数组】
四、元注解
1.什么是元注解?
定义在注解上的注解称为元注解。
几种元注解
1. @Target(value=可以取下面这些内容): 作用限制注解使用得位置。
/** 表示可以作用在类,接口,枚举 */
TYPE,
/** 属性 */
FIELD,
/** 普通方法上 */
METHOD,
/** 方法参数 */
PARAMETER,
/** 构造方法上 */
CONSTRUCTOR,
/** 局部变量 */
LOCAL_VARIABLE
2. @Retention: 注解什么时候生效。默认时源码 java经历了那些阶段。
源码阶段-->字节码阶段--->运行阶段
/**
* 源码时生效
*/
SOURCE,
/**
* 字节码时生效
*/
CLASS,
/**
* 运行时生效。
* 在JVM内存中还有该注解。
都会被设置为运行时有效
*/
RUNTIME
3. @Documented 当生产API文档时该注解还存在。
4. @Inherited 是否运行被子类继承。
自定义注解与元注解结合例子:
public class Test01 {
public static void main(String[] args) {
GetTime getTime=new GetTime();
getTime.getNow();
}
}
//预定义注解4种
/* 1. @Override: 重写得注解。符合重写得规则。
2. @Deprecated: 表示已过时。
3. @SuppressWarnings: 表示压制警告。
4. @FunctionInterface: 表示函数式接口。表示该接口中有且仅有一个抽象方法。
*/
//函数式接口,该接口有且仅有一个抽象方法
@FunctionalInterface
interface Usb{
//唯一抽象方法
public void show();
//默认方法
default void fun(){}
}
class KeyBoard implements Usb{
//重写的注解,一定要符合重写规则
@Override
public void show() {
}
}
class GetTime{
//过时的注解
@Deprecated
public void getNow(){
}
}