JAVA注解学习

2019-03-09  本文已影响0人  鹅鹅鹅曲项向天歌呀

什么是注解 ?

【这个解释起来比较。。。。不知道怎么解释,还是直接百度吧,不会咱就抄一抄嘛~~~】
定义一:用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。
定义二: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());
            }
        }
    }

来,看看打印台~~~

看打印台

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

完毕

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

~~~如有侵权,给我留言 ,看到like删~~~

ps:我比较懒,抄了好多~~~

上一篇下一篇

猜你喜欢

热点阅读