java系列之——注解

一、什么是注解

        官方定义:注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。

注解有许多用处,主要如下: 
- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息 
- 编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。 
- 运行时的处理: 某些注解可以在程序运行的时候接受代码的提取

        自己的理解:注解就是用来标记类,属性,或方法的标签。

在java中有两种注解:1.元注解 2.自定义注解

元注解又是什么呢?可以这么理解,元注解就是标记我们自定义注解的标签。然而这些标签有什么作用呢?先来看一下下面的例子:

二、注解的作用:

首先我们定义一个自己的注解(标签)

package annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTag {
	String name() default "hh";//默认值
	int age() default 0;
}

我们来测试一下 

package annotation;

import java.lang.reflect.Field;

public class AnnotationTest {
	@MyTag(name = "xyp")
	public String name;
	@MyTag(age = 18)
	public int age;

	public static void main(String[] args){
		AnnotationTest an = new AnnotationTest();
		an.say();
	}

	public void say() {
		System.out.println(name + ":" + age);
	}
}

运行结果: 

咦?说好的xyp:18呢?怎么没有出现预期效果?到这里其实我们只是定义了我们的标签,还没给我们的标签“赋能”呢,接下来看看给标签赋能后的效果:

package annotation;

import java.lang.reflect.Field;

public class AnnotationTest {
	@MyTag(name = "xyp")
	public String name;
	@MyTag(age = 18)
	public int age;

	public static void main(String[] args) throws IllegalArgumentException,
			IllegalAccessException {
		AnnotationTest an = new AnnotationTest();
		Class clazz = an.getClass();
		Field[] fields = clazz.getDeclaredFields();
		for (Field f : fields) {
			if (f.isAnnotationPresent(MyTag.class)) {
				if (f.getName().equals("name")) {
					f.set(an, f.getAnnotation(MyTag.class).name());
				}
				if (f.getName().equals("age")) {
					f.set(an, f.getAnnotation(MyTag.class).age());
				}
			}
		}

		an.say();
	}

	public void say() {
		System.out.println(name + ":" + age);
	}
}

 我们再来看看运行效果:

 如常所愿,我们的注解起作用了,反射结合我们的注解(标签)发挥了它真正的威力,我们的注解标记好之后,然后对注解的地方做一系列猛如虎的操作,指哪打哪。想想以前我们看到各种框架里面的@Test啊@service啊什么的都是这样的原理,瞬间是不是世界清晰了很多。

下面是一篇写得好的注解:https://blog.csdn.net/briblue/article/details/73824058 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值