我是靠谱客的博主 生动唇膏,最近开发中收集的这篇文章主要介绍Java注解详解Java中的注解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java中的注解

1.什么是注解

1.1注解

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK5.0及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

1.2注解的作用

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能过实现基本的编译检查【Override】

2.基本内置注解

@Override
作用:通过代码里标识的元数据让编译器能过实现基本的编译检查
@Deprecated
作用:是对不应该再使用的方法添加注解,当编程人员使用这些方法时, 将会在编译时显示提示信息
@SuppressWarnings
其参数有:
deprecation,使用了过时的类或方法时的警告
unchecked,执行了未检查的转换时的警告
fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path,在类路径、源文件路径等中有不存在的路径时的警告
serial,当在可序列化的类上缺少serialVersionUID 定义时的警告
finally ,任何 finally 子句不能正常完成时的警告
all,关于以上所有情况的警告

3.自定义注解

它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface

  • 定义一个注解的方式:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {

 }
  • Java中提供了四种元注解,专门负责注解其他的注解
    @Retention元注解
    表示需要在什么级别保存该注释信息(生命周期)
    可选的RetentionPoicy参数包括:
    RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
    RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
    RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息

  • @Target元注解,默认值为任何元素,表示该注解用于什么地方。
    可用的ElementType参数包括
    ElementType.CONSTRUCTOR: 构造器声明
    ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
    ElementType.LOCAL_VARIABLE: 局部变量声明
    ElementType.METHOD: 方法声明
    ElementType.PACKAGE: 包声明
    ElementType.PARAMETER: 参数声明
    ElementType.TYPE: 类、接口(包括注解类型)或enum声明

  • @Documented将注解包含在JavaDoc中

  • @Inheried允许子类继承父类中的注解

4.注解详细图

注解分类图

5.android中的常用注解

Android Support 包之一的 support-annotations 是通过静态编译检测来提高代码质量的一个注解工具。

  • 在 Gradle 中通过如下声明来使用该注解包:
dependencies {
compile ‘com.android.support:support-annotations:22.2.0′
}

参数检测类型:

@Nullable  一个变量、参数或者函数返回值可以为NULL
@NonNull   一个变量、参数或者函数返回值不可以为NULL

资源类型

@AnimatorRes 表明该参数、变量或者函数返回值应该是一个 Animator 类型的资源
@AnimRes 表明该参数、变量或者函数返回值应该是一个 Anim 类型的资源
@AnyRes 表明该参数、变量或者函数返回值应该是一个任意类型的资源
@ArrayRes 表明该参数、变量或者函数返回值应该是一个 Array 类型的资源
@AttrRes 表明该参数、变量或者函数返回值应该是一个 attribute 类型的资源
@BoolRes 表明该参数、变量或者函数返回值应该是一个布尔类型的资源
@ColorInt 表明该参数、变量或者函数返回值应该是一个颜色值而不是颜色资源引用,例如应该是一个 AARRGGBB 的整数值。
@ColorRes 表明该参数、变量或者函数返回值应该是一个 color 类型的资源,而不是颜色值。注意和 ColorInt 区别
@DimenRes 表明该参数、变量或者函数返回值应该是一个 dimension 类型的资源
@DrawableRes 表明该参数、变量或者函数返回值应该是一个 drawable 类型的资源
@FractionRes 表明该参数、变量或者函数返回值应该是一个 fraction 类型的资源
@IdRes 表明该参数、变量或者函数返回值应该是一个资源的 ID 类型
@IntegerRes 表明该参数、变量或者函数返回值应该是一个整数类型的资源
@InterpolatorRes 表明该参数、变量或者函数返回值应该是一个 interpolator 类型的资源
@LayoutRes 表明该参数、变量或者函数返回值应该是一个 layout 布局文件类型的资源
@MenuRes 表明该参数、变量或者函数返回值应该是一个 menu 类型的资源
@PluralsRes 表明该参数、变量或者函数返回值应该是一个 plurals 类型的资源
@RawRes 表明该参数、变量或者函数返回值应该是一个 raw 类型的资源
@StringRes 表明该参数、变量或者函数返回值应该是一个字符串类型的资源
@StyleableRes 表明该参数、变量或者函数返回值应该是一个 styleable 类型的资源
@StyleRes 表明该参数、变量或者函数返回值应该是一个 style 类型的资源
@TransitionRes 表明该参数、变量或者函数返回值应该是一个 transition 类型的资源
@XmlRes 表明该参数、变量或者函数返回值应该是一个 XML 类型的资源

线程注解类型

@UiThread 表明函数在主线程中
@MainThread 表明函数在主线程中
@WorkerThread 表明函数在工作程中
@BinderThread 表明函数在绑定线程中程中

权限注解类型

@RequiresPermission 用来表明该函数执行需要一个或者多个权限,如果你没有声明这些权限,则会给出警告
//如果只要满足多个权限中的一个,用 anyOf ; 如果要满足多个权限,用 allOf 
@RequiresPermission(anyOf = {
Manifest.permission.READ_HISTORY_BOOKMARKS,
Manifest.permission.WRITE_HISTORY_BOOKMARKS})
public static final void updateHistory(ContentResolver cr, String url, boolean real) {
}

返回值是否使用检测注解

@CheckResults 用来检测函数的返回值是否被使用了,如果没有使用则说明可能不应该调用这个函数,可以给出建议使用哪个函数。

调用 super 函数的注解

@CallSuper 来表明重写这个函数需要调用 super 父函数。

数值常量注解

@IntRange 是用来表明整数型参数的取值范围的

 //setAlpha 函数的参数 alpha 的取值范围应该为 0 到 255,其他值都是非法的;
public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }

@FloatRange 同样是表明浮点数范围的

public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {…}

@Size 是用来表明数组类型参数的长度的

可以用 @Size(min=1) 来指定数组的最小长度,@Size(2) 则表明该数组参数必须是2.

最后

以上就是生动唇膏为你收集整理的Java注解详解Java中的注解的全部内容,希望文章能够帮你解决Java注解详解Java中的注解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部