什么是注解 ?

【这个解释起来比较。。。。不知道怎么解释,还是直接百度吧,不会咱就抄一抄嘛~~~】

定义一:用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。

定义二:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。

定义三:【我还在想一种形象的解释。。。。至今还没想出来,等我想出来了,就过来写上。。。。】*

那个最常见的@Override,重写方法,这个符号就是注解。。。。。

注解的好处 ?

【我抄的,希望作者不会,来打我,这个问题是在是难以启齿,就好像再问我,class的作用是啥,intetface的作用是啥一样,我也不知道怎么回家。。。[委屈]】

1、能够读懂别人写的代码,特别是框架相关的代码。

2、本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程更加简洁,代码更加清晰。

3、(重点)刮目相看

(但是怎么样才能让别人刮目相看呢?会用注解不是目的,最重要的是要使用自定义注解来解决问题。)

举个栗子:

如果面试的时候,你跟老板说你会使用注解,老板觉得你这个人还行;但是如果老板发现你会自定义注解解决问题,老板肯定就会眼前一亮。

怎么使用注解 ?

不多说了,,,上代码。先看代码再解释那个@XXX的意思~~~

我定义了,注解的方法的注解~~~

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
String id();
String description() default "This id default description!";
}
@interface 用来声明一个注解

,同Class,Interface一样~~~~

@Target : 注解的作用目标。

类型

作用域

ElementType.ANNOTATION_TYPE

可以应用于注释类型

ElementType.CONSTRUCTOR

可以应用于构造函数

ElementType.FIELD

可以应用于字段或属性

ElementType.LOCAL_VARIABLE

可以应用于局部变量

ElementType.METHOD

可以应用于方法级注释

ElementType.PACKAGE

可以应用于包声明

ElementType.PARAMETER

可以应用于方法的参数

ElementType.TYPE

可以应用于类的任何元素

@Retention : 注解的保留策略

类型

作用域

RetentionPolicy.SOURCE

注解仅存在于源码中,在class字节码文件中不包含

RetentionPolicy.CLASS

默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得

RetentionPolicy.RUNTIME

注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Documented :注解包含在javadoc中,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。 【我没用过】

@Inherited :注解可以被继承   【我没用过】

好了,解释完毕,下一步~~~~go on

getDescription()在这个方法上使用了注解~~~

public class McyTest {
private String name;
private String sex;
private int age;
private int phoneNum;
public McyTest(String name, String sex, int age, int phoneNum) {
this.name = name;
this.sex = sex;
this.age = age;
this.phoneNum = phoneNum;
}
@Test(id = "_01", description = "好好好")
public String getDescription() {
return "马春燕";
}
@Override
public String toString() {
return "McyTest{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", phoneNum=" + phoneNum +
'}';
}
}

下一步,我们测试一下注解咯~~~

通过反射获取注解~~~

ps:(反射是必须会的,二者相互结合,才能使用下一章写咯...)

public static void main(String[] args) {
McyTest mcyTest = new McyTest("马春燕", "女", 20, 123456);
Method[] methods = mcyTest.getClass().getDeclaredMethods();//过去声明的方法
for (Method method : methods) {
Test annotation = method.getAnnotation(Test.class);//获取注解
if (annotation != null) {
System.out.println(annotation.description());
}
}
}

来,看看打印台~~~

看打印台

把注解的值获取出来了~~~~

完毕

你想问我,这个在程序里能干什么???是不是还没看懂???别着急,我写个反射,一起举个栗子,就一目了然了,先学习下基础~~~~