一、注解概念
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 TYPE2>@Retention 表面这个注解被保留的时间长短
RetentionPoicy.RUNTIME:表示只在运行时有效
RetentionPoicy.SOURCE:表示只在源文件中有效
RetentionPoicy.CLASS:表示只在class文件中有效
@Retention.RUNTIME3>@Documened 用来描述其他类型的注解 被标注为公共程序员的Api 这个注解是没有成员的
@Documened4>@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
提供了程序本身逻辑外额外的信息,只是用来修饰这些信息.帮助我们更快的处理数据用的.
注解的代码对我们的代码是没有直接影响的,它不可以与我们的代码进行交互,可以保证我们组件的安全性.也就是说可以保留这些注解信息.
网友评论