什么是注解 ?
【这个解释起来比较。。。。不知道怎么解释,还是直接百度吧,不会咱就抄一抄嘛~~~】
定义一:用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。
定义二: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());
}
}
}
来,看看打印台~~~
看打印台
把注解的值获取出来了~~~~
完毕
你想问我,这个在程序里能干什么???是不是还没看懂???别着急,我写个反射,一起举个栗子,就一目了然了,先学习下基础~~~~