一、注解的概述
注解的概述:
是一种代码级别的说明,和类与接口属于平级关系
注解(Annotation):相当于一种标记,在程序中假如注解就等于为程序打上某种标记以后,Java编译器,开发工具和其他程序可以通过反射来了解类以及各种元素上有没有标记,看你的程序标记什么,就去做什么
我们目前为止了解过的注解:
1. @Override:子类重写父类方法的时候 编译的时候
2.@FunctionalInterface:函数式接口 编译的时候
3.#Test:JUnit测试的注解 编译的时候
注解用在“源码”中,作为一个标记
给【注解解析器】看的,告诉 注解解析器 怎么编译,怎么运行代码
在开发中,我们一般都使用的注解比较多一些
二、JDK提供的三个基本注解
public class Test {
public static void main (String[] args) {
/*
* JDK提供的三个基本注解
* 1.@Override:描述方法的重写
* 2.SuppressWarnings:压制/忽略警告
* 3.Deprecated:标记过时
* */
}
}
@SuppressWarnings("注解")
class Fu{
public void show1(){}
}
class Zi extends Fu{
@Override
public void show1 () {
super.show1();
}
}
三、自定义注解
public class Test {
/*
* 自定义注解
* 格式:
* public @interface 接口名称{
* 属性
* }
*
* 注解属性:
* 数据类型 属性名();
* 属性类型:
* 1.基本数据类型
* 2.String
* 3.Class类型
* 4.注解类型
* 5.枚举类型
* 6.以上类型的一维数组类型
* */
public static void main (String[] args) {
//@MyAnnotation()
int num;
}
}
public @interface MyAnnotation {
// 1.基本数据类型
byte b();
short s();
int i();
long l();
char c();
double d();
float f();
boolean flag();
// 2.String
String str();
// 3.Class类型
Class cl();
// 4.注解类型
Override my();
// 5.枚举类型
Color color();
// 6.以上类型的一维数组类型
}
四、注解的使用
注解的使用:
不带属性的注解:@注解名称
带属性的注解:@注解名称(属性名=属性值,属性名=属性值,...)
注意:带属性的注解在使用的时候一定要给属性赋值,并且所有的属性都要赋值
使用:
先自定义两个注解,一个带属性,一个不带属性
public @interface MyAnnotation1 {
/*
* 带属性的注解
* */
String name();
int age();
String[] arr();
}
public @interface MyAnnotation2 {
}
@MyAnnotation1(name = "dkt",age = 18,arr = {"张三","李四"})
@MyAnnotation2
public class Test {
public static void main (String[] args) {
}
}
五、给注解属性赋值的注意事项
给注解属性赋值的注意事项:
1.一旦注解有属性了,使用注解的时候,属性必须有值
2.若属性类型是一维数组的时候,并且数组的值只有一个的时候可以省略{}
3.如果注解只有一个属性,并且属性名为value,那么使用注解给注解属性赋值的时候,注解属性名value就可以省略
4.注解属性可以有默认值,格式:属性类型 属性名() default默认值