——java中的注解

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

注解的作用:

   1,生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等

   2,跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。

     作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。

     以后java的程序开发,最多的也将实现注解配置,具有很大用处;

   3,在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。java的内置了3个基本注解,保存在java.lang中:

   1,@SuppressWarnnings("deprecation")用于取消警告

   2,@Deprecated标识该处已经过时。

   3,@Override标识重写父类的方法或实现接口的方法

   注:

      注解相当于一种标记,在程序中加了注解就等于打上了某种标记

      注解可以在包,类,字段,方法,方法参数及局部变量上使用。

以下是两个元注解:

   //设置该注解类的生命周期为存在至运行时,这种称为元注解:

     其定义的生命周期有三种值:SOURCE,CLASS,RUNTIME

   @Retention(RetentionPolicy.RUNTIME)

   //设置该注解使用的位置,可以设置多个位置,以数组的方式存储

   @Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})

注解的属性:

   注解中的属性相当于是某种标示。相当于一个公司的胸牌,如果有胸牌就是该公司员工,否则就不是。

注解的属性的返回值类型有:

   1--8大基本数据类型:float,double,byte,short,int,long,char,boolean

   2--String类型

   3--Class类型

   4--Annotation注解类型

   5--枚举类型

   6--以及以上各种类型的数组类型

   注:注解中有一个比较特殊的属性value()如果只想给value属性赋值,则就给其他属性设默认值即可。

注解的定义语法:

    @元注解//可以定义注解的生命周期,及注解使用的位置等。

    @interface 注解名称{

//代码体

返回值类型 属性名() [default 默认值]//defualt语句是为属性设置缺省默认值,可以省略

    }

注解的综合示例代码:

     自定义的一个注解:

package com.itheima.annotationdemos;

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

/**
 * 自定义的一个注解
 * @author wuyong
 *
 */
@Retention(RetentionPolicy.RUNTIME)//默认值是CLASS
public @interface AnnotationUnit {
	String value();
}

综合的简单示例代码:

其中的代码要用到上面的自定义注解。

package com.itheima.annotationdemos;

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

import javax.management.DescriptorKey;

/**
 * 注解的反射调用
 * @author wuyong
 * 三个基本的注解
 *@SuppressWarnnings("deprecation")用于取消警告
 *@Deprecated标识该处已经过时。
 *@Override标识重写父类的方法或实现接口的方法
 *总结:
 *	1,注解相当于一种标记,在程序中加了注解就等于打上了某种标记
 *	没加则等于没有任何标记。标记可以在包,类,字段,方法,方法参数及局部变量上。
 */
@AnnotationClass1(100)
public class AnnotationDemo {

	/**
	 * @param args
	 */
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		//调用一个过时的方法
		System.runFinalizersOnExit(true);
		
		//判断指定类型的注解存在于此元素上,则返回 true,否则返回 false。
		if (AnnotationDemo.class.isAnnotationPresent(AnnotationClass1.class)) {
			
			//如果存在该元素的指定类型的注解,则返回对应注解,否则返回 null。
			AnnotationClass1 ad = (AnnotationClass1)AnnotationDemo.class.getAnnotation(AnnotationClass1.class);
			
			//利用获得的注解对象来进行相应的操作,比如打印出注解,及其属性。
			System.out.println(ad);
			System.out.println("布尔类型属性:" + ad.isBoolean());
			System.out.println("char类型属性:" + ad.isChar());
			System.out.println("long类型属性:" + ad.isLong());
			System.out.println("Byte类型属性:" + ad.isByte());
			System.out.println("Double类型属性:" + ad.isDouble());
			System.out.println("Float类型属性:" + ad.isFloat());
			System.out.println("Short类型属性:" + ad.isShort());
			System.out.println("String类型属性:" + ad.isString());
			System.out.println("Class类型属性:" + ad.isClass());
			System.out.println("Array类型属性的长度:" + ad.isArray().length);
			System.out.println("Annotation类型属性的value值:" + ad.isAnnotation().value());
		}
	}

	//标识该方法为过时的
	@Deprecated
	public void show() {
		System.out.println("被标识失效的方法");
	}
	//标识重写
	 @Override
	public boolean equals(Object obj) {
		return true;
	}
}

/**
 * 注解的定义和反射调用
 * @author wuyong
 *注解属性的返回值类型有:
 *	1--8大基本数据类型:float,double,byte,short,int,long,char,boolean
 *	2--String类型
 *	3--Class类型
 *	4--Annotation注解类型
 *	5--枚举类型
 *	6--以及以上各种类型的数组类型
 */

//设置该注解类的生命周期为存在至运行时,次种称为元注解:有三种值:SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)

//设置该注解使用的位置,可以设置多个位置,以数组的方式存储
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})
@interface AnnotationClass {
	/**
	 * 以下是注解的属性
	 * defualt语句是为属性设置缺省值
	 * @return
	 */
	//字符串类型
	String isString() default "blue";
	
	//int类型
	int value();//该属性是最特殊的,即如果注解中只有一个value属性时,赋值时就可以省略掉’value =‘ 这一部分直接写值。
	
	//布尔类型
	boolean isBoolean() default true;
	
	//单精度浮点型
	float isFloat() default 1;
	
	//双精度浮点类型
	double isDouble() default 1.12;
	
	//char类型
	char isChar() default 'a';
	
	//byte类型
	byte isByte() default 11;
	
	//short类型
	short isShort() default 22;
	
	//long类型
	long isLong() default 1990;
	
	//Class类型
	Class isClass() default String.class;
	
	//数组类型
	int[] isArray() default {1,2,3};
	
	//Annotation注解类型
	AnnotationUnit isAnnotation() default @AnnotationUnit("red");
}

  ---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

发布了25 篇原创文章 · 获赞 4 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章