Java注解详解和使用

一.什么是Java注解(Annotation)

先区别注释(comment)和注解:

注释:是解释给人看的,可以对程序作出一些解释

注解:也是给人看的,可以对程序作出一些解释,更重要的是给编译器看和解释,可以被编译器读取

注解是JDK 5.0引入的技术

    从字面意思来看就是注释、解释。但是实际不仅仅是这样。

注解的格式

"@注释名" 还可以添加一些参数名 如:@suppressWarnings("unchecked")

可以在哪里使用:

package  class method field 相当于给他们增加了额外的辅助信息,可以通过反射对这些元数据进行访问

内置注解

Override:只用于修饰方法,表示方法重写,另外有检查报错的作用

Deprecated:只用于修饰类、方法和属性,表示废弃,不鼓励程序员使用,但是可以使用,通常它有危险或者有更好的替代方法

SuppressWarnings:抑制编译时的警告,需要加一个参数才能使用,这些参数是设定好的,"all"、"unchecked"等

元注解(meta-annotation):负责对注解作注解也就是定义其他注解:用来对其他annotation类型作说明

@Target:注解使用的范围(被描述的注解用在什么地方 ) 方法 、类 、参数  构造方法等

@Retention:在什么级别保留该注释信息,用于描述注解的生命周期  SOURCE<CLASS<RUNTIME  我们一般都是runtime

@Document:该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解

自定义注解:一般会用到@Target和@Retention

@Retention(RUNTIME)//使用生命周期
@Target(PARAMETER)//使用范围
public @interface MyAnnotation{
//注解值的名称和类型
String value();参数名称是name,类型是string数组,value="6"
String[] name();//参数名称是name,类型是string数组,使用的时候是 name={"我的", "你还"}
int age() default 0; //使用的时候该值不写的话默认值是0 使用的时候是 age=6

}

@MyAnnotation(value="6", name={"wo", "mo"}, age=7)

public void test(){

}

如果注解只有一个值 并且值的名称为value  使用的时候可以省略value= 例如:

@Retention(RUNTIME)//使用生命周期 
@Target(PARAMETER)//使用范围
public @interface MyAnnotation1{
//注解值的名称和类型
String value() defaulte;参数名称是name,类型是string数组,value="6"

}

使用

@MyAnnotation(“6“),有默认值可以直接不写 @MyAnnotation()

注解如何读取:用反射机制去读取,一般框架都是注解和反射

第三方框架库都是自定义注解,可以通过反射拿到 类、字段field、方法method和方法的形参的注解 。通过注解可以对他们做出一些处理 。比如Rxjava、Retrofit 、EventBus、GreenDao都是这样

参考:https://blog.csdn.net/yangjizhao/article/details/51399452

https://www.bilibili.com/video/BV1p4411P7V3?from=search&seid=12224755193752059853

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值