美文网首页
JAVA注解学习

JAVA注解学习

作者: 鹅鹅鹅曲项向天歌呀 | 来源:发表于2019-03-09 19:24 被阅读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:我比较懒,抄了好多~~~

    相关文章

      网友评论

          本文标题:JAVA注解学习

          本文链接:https://www.haomeiwen.com/subject/kfdepqtx.html