注解Annotation

2019-05-26  本文已影响0人  崽子猪

一、注解概念

1.什么是注解(Annotation)?

就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法

基本的规则:Annotation不能影响代码的执行,无论增加、删除Annotation,代码都始终如一的执行.(由于JVM的特点导致的)

2.什么是元数据(metadata)?

 [用来描述数据的数据]  [用来描述数据但本身也是数据] [描述代码之间的关系和其他内在资源]

    1>元数据以标签的形式存在于Java代码中

    2>原数据描述的信息是类型安全的

    3>原数据需要编译器之外的工具额外的处理用来生成其它的程序部件

    4>元数据可以只存在Java源代码级别,也可以存在于编译之后得Class文件内部


二、注解分类

1.系统内置标准注解

    1> Override[标记型的注解](用来关注方法)


父类方法 子类继承父类方法

加了@Override注解之后子类继承父类之后所使用的方法名是父类里没有的话 Overrid就会爆红


    2>Deprecated[标记型的注解](表示代码已经过时了)


父类方法 子类方法

如果被标志了@Deprecated这个注解那么子类继承父类方法之后他会被划上过时那条横线.


3>SuppressWarnnings[抑制编译器的一个警告](用于选择关闭编译器这个类成员的方法的一些警告)

SuppressWarnnings注解demo图

2.元注解

1>@Target 说明我们注解所修饰的对象的修饰范围

ElementType.TYPE:描述类、接口和枚举的声明

ElementType.FIELD:描述域

ElementType.Constand:描述构造器

@Target TYPE

2>@Retention 表面这个注解被保留的时间长短

RetentionPoicy.RUNTIME:表示只在运行时有效

RetentionPoicy.SOURCE:表示只在源文件中有效

RetentionPoicy.CLASS:表示只在class文件中有效

@Retention.RUNTIME

3>@Documened 用来描述其他类型的注解 被标注为公共程序员的Api 这个注解是没有成员的

@Documened

4>@Inherited 标记型的注解 表示某个被标注的类型是可以被继承的

@Inherited 

三、Android support annotations

     1.Nullness注解 可以用来标识我们参数或者返回值为null或者不为null

        1) @NonNull 返回值不能为空

        2) @Nullable 返回值可以为空


表示参数和返回值是不能为null的

    2.ResourceType注解  为了区分资源Id或者是String类型的资源还是图片类型的资源 【资源类型的注解 】

        @StringRes 要传递String类型的资源ID (R.String.app_name)


如果传递了R.Style.AppTheme就会报错

    3.Threading 注解 是一个线程注解

            @WorkerTherad 表明操作是在子线程


如果当前操作不是在子线程那么会爆红

            @UiThread 表明操作是在主线程

如果当前操作不是在主线程那么会爆红

    4.Overrding Methods注解 你的方法要重写你父类的方法,这个时候你又想你父类的方法被调用

            @CallSuper


调用ActionBarActivity

四、总结

    1.注解是如何被处理的?

        当Java源代码编译的时候,编译器使用一个插件[一个注解处理器],用来处理这些注解.当处理完这些源码后它会产生一个报告信息.会将这些数据加入到.class文件中,可以查找相应的原数据并做相应的处理   

         也可以通过反射来处理我们注解

    2.Annotation    

        提供了程序本身逻辑外额外的信息,只是用来修饰这些信息.帮助我们更快的处理数据用的.

        注解的代码对我们的代码是没有直接影响的,它不可以与我们的代码进行交互,可以保证我们组件的安全性.也就是说可以保留这些注解信息.

上一篇下一篇

猜你喜欢

热点阅读