了解和入门注解的应用(Annotation)


         注解相当于一种标记,再程序中加了注解就等于为程序打上了某种标记,没有,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种编辑,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

package com.itheima.shipin.zhujie;

public class zhujie {

	@SuppressWarnings("deprecation")
	// 告诉java编译器不提示语法过时
	public static void main(String[] args) {
		System.runFinalizersOnExit(true);
	}

	@Deprecated
	// 提示这个方法已经过时
	public static void oldConstrutor() {
		System.out.println("这个方法已经过时");
	}

	// @Override 作用:可以保证编译时Override函数的声明正确性。

}

注解的应用结构图



创建一个注解类代码如下

package com.itheima.shipin.zhujie;

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

@Retention(RetentionPolicy.RUNTIME)		//元注解 注解的注解
public @interface HeimaAnnotation {

}

调用注解并查看是否存在

代码如下

package com.itheima.shipin.zhujie;

import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Annotation;

@HeimaAnnotation
public class AnnotationTest {

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

		if (AnnotationTest.class.isAnnotationPresent(HeimaAnnotation.class)) {
			HeimaAnnotation annotation = (HeimaAnnotation) AnnotationTest.class
					.getAnnotation(HeimaAnnotation.class);
			System.out.println(annotation);
		}
	}

}
运行结果

@com.itheima.shipin.zhujie.HeimaAnnotation()


为注解增加属性(注解的强大之处)

package com.itheima.shipin.zhujie;

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

@Retention(RetentionPolicy.RUNTIME)
// 元注解 注解的注解
@Target({ ElementType.TYPE, ElementType.METHOD })
// 注释可放CLASS上也可以用在方法上
public @interface HeimaAnnotation {
	String color() default "blue";

	String value();

	int[] arrayAttr() default { 1, 2, 3 };

	MetaAnnotation annotation() default @MetaAnnotation("abcd");
}

第四个属性也是注解,源代码为

package com.itheima.shipin.zhujie;

public @interface MetaAnnotation {
	
	String value();

}

查看注解的属性

package com.itheima.shipin.zhujie;

import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Annotation;

@HeimaAnnotation(color = "red", value = "abc", arrayAttr = 1, annotation = @MetaAnnotation("asdf"))
public class AnnotationTest {
	@HeimaAnnotation("heima")	//需要给其他注解的属性赋予默认值
	public static void main(String[] args) throws Exception {

		if (AnnotationTest.class.isAnnotationPresent(HeimaAnnotation.class)) {
			HeimaAnnotation annotation = (HeimaAnnotation) AnnotationTest.class
					.getAnnotation(HeimaAnnotation.class);

			System.out.println(annotation.color());
			System.out.println(annotation.value());
			System.out.println(annotation.arrayAttr().length);
			System.out.println(annotation.annotation().value());

		}
	}

}

运行结果

red
abc
1
asdf





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值