Java注解

注解

注解是代码级别的说明,用来描述代码。可以使用在类、方法、字段(成员变量)、接口、包上等。对代码本身没有 影响,可以看做是一个【标记】

举个例子帮助理解:我是一个程序员,会写代码,但是经常被人欺负有一天被人打了。为了不让被人欺负,我在身

上纹了纹身,看起来很吓人。于是当别人想打我的时候,看到我身上的纹身就不敢打了我。 这里纹身就是一个标记,可以给别人起到威慑的作用。但是并不影响我作为程序员完成 敲代码的工作。 同理注解就好比纹身,它可以给类、成员变量、方法、接口等一些额外的标记信息,并 不影响代码的主要功能,只不过加上注解后多了一些额外的信息。

元注解

元注解有点不太好理解,因为它是用来描述注解的注解。

在定义注解时,为了说明注解保留在那个阶段,以及可以使用的目标等(现在可能还看不懂,继续往下看)。

@Target : 描述注解使用的目标(类、方法、变量...)

@Retention: 描述注解保留到那个阶段(SOURCE,CLASS,RUNTIME)

Java 内置注解

Java5 之后引入的注解,并且提供了几个内置注解,下面介绍几个常用的注解, 其中@Override e我们也经常用到

@Override 用来标记方法是复写的父类方法

@Deprecated 用来描述一个方法或者类已过时

@SupperssWarnings 压制警告(在IDEA和Ecipse中的黄色波浪线,强迫症者了解一下)

@FunctionalInterface 描述一个接口为函数式接口

以@Override 为例,我们看一下它的源码,学习注解是怎么定义的 @Override 注解是 Java 内置的,我们在 IDEA 或者 Eclipse 这样的高级编辑器中写代码,它们 会通过识别@Override 注解来确定是否为复写的方法,并根据方法 复写的要求给出明显的语法提示。

@Target 元注解 说明@Override 注解只能使用在方法上,所以我们在其他地方使用就是错误 的。 @Retenttion 元注解,说明@Override 注解在源代码阶段有效,所以写代码的时候 IDEA 可以 提供编译检查。 其他注解这里不做 详细解释、简单知道他们有什么用就可以了

自定义注解

前面看了@Override 注解的定义,其实代码很简单。

  • 新建一个注解@Pro;
  • 然后用@Target 元注解说明一下使用目标;
  • 使用@Retention 说明注解保留在哪个阶段;
  • 在注解中写上几个属性,注解中的属性比较特殊属性名后面加上一对小括号(本质上它是一个方法,当做属 性理解就可以了)。
//定义一个注解,就是定义一个标签。 
//标签可以用在哪些地方,通过@Target指定 
//标签可以保留到那个阶段,通过@Retention指定
@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface Pro {

//属性列表--本质就是抽象方法

String classname(); //属性为String类型

String methodname(); //属性为基本类型

}

使用注解

Test 类中解析类上的注解,使用反射来获取注解提供的信息,并使用

@Pro(classname = "com.itheima.test.Game",methodname = "play")

public class Test {

public static void main(String[] args) throws Exception{

//通过注解所在的Class文件,获取类上的Pro注解

Pro pro = Test.class.getAnnotation(Pro.class);

//再通过注解,获取注解上的属性值

String classname = pro.classname();

String methodname = pro.methodname();

//再通过反射加载classname对应的类

Class<?> clazz = Class.forName(classname);

Object obj = clazz.getConstructor().newInstance();

//通过字节码获取到methodname方法

Method method = clazz.getMethod(methodname);

//让方法执行

method.invoke(obj);

}

}

注解总结

玩注解分为 3 个步骤:定义注解、使用注解、解析注解。

3 个步骤给你做一个比喻《奔跑吧兄弟》应该都看过,里面有个游戏叫撕名牌

定义注解(制作名牌),使用注解(贴名牌),解析注解(撕名牌)

定义注解

注解使用@interface来定义 ,定义注解使用需要使用元注解说明注解使用的目标、保留的阶段,注解可以包含属性。

在定义注解时可以通过元注解说明,注解保留的阶段,以上讲的是运行阶段的注解。

使用注解

按照定义注解规定的目标,把注解放在对应的代码上,有属性的话需要给属性赋值

解析注解

如果是自定义的注解,需要自己编写代码去解析注解获取注解描述的信息,并根据需求使用,否则不然注解毫无意义。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值