Anntation(注解)-----Java之辅助工具(大有前途)

之前Junit工具就有用到注解,可以单独调试程序,如 @Test ,@Override等这些就是注解。原先JUnit工具可以点击查看点击打开链接。现在介绍如何做出的注解

 元数据

所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。
       元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。许多元数据工具,如XDoclet,将这些功能添加到核心Java语言中,暂时成为Java编程功能的一部分。
        一般来说,元数据的好处分为三类:文档编制、编译器检查和代码分析。代码级文档最常被引用。元数据提供了一种有用的方法来指明方法是否取决于其他方法,它们是否完整,特定类是否必须引用其他类,等等。 

什么是注解:

    Java中的注解就是Java源代码的元数据,也就是说注解是用来描述Java源代码的。  基本语法就是:@后面跟注解的名称。如 @Test.

Java中预定义注解 :(Java.Lang.Anntation)

①Override:标识某一个方法是否正确覆盖了它的父类的方法。
②Deprecated:表示已经不建议使用这个类成员了。  它是一个标记注解。
③SuppressWarnings:用来抑制警告信息。


自定义注解1:

自定义注解的语法很简单,跟定义接口类似,只是在名称前面加上@符号。 

<span style="font-size:18px;">public @interface MyAnno {
<span style="white-space:pre">	</span>}//最简单的,不带任何注释的</span>
<span style="font-size:18px;">使用:</span>
<span style="font-size:18px;"><span style="white-space:pre">	</span></span><pre name="code" class="java">@MyAnno//这是限制类
public class UserModel{
} 

 
 

为注解添加成员

<span style="font-size:18px;">//定义
public @interface MyAnno {
  public String schoolName();
}</span>

使用:

<span style="font-size:18px;">
@MyAnno(schoolName="湖南城市学院")
public class UserModel{
} 
</span>
<span style="font-size:18px;">//使用2
@MyAnno(schoolName="城院Java高手训练营")
public class UserModel{</span><span style="font-size:14px;">
}
</span>
以上只是简单地介绍,不仅如此,还可以对注解进行注解,也就是说可以限制,是否作用于类 @Target(ElementType.TYPE),变量,方法@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE }),下面的代码有详细介绍

对注解的注解:

☆指定目标 Target

在了解如何使用Target 之前,需要认识另一个类,该类被称为ElementType (通过API详细学习) ,它实际上是一个枚举。这个枚举定义了注释类型可应用的不同程序元素。 

☆设置保持性 Retention(@Retention(RetentionPolicy.SOURCE) )编译器要丢弃的注释

@Retention(RetentionPolicy.Class)编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。这是默认的行为。

@Retention(RetentionPolicy.RUNTIME)编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。 (很重要,进行类反射的时候,后面的例子会看到)

 RetentionPolicy (通过API详细学习)枚举类中定义了3种注解保持性,分别决定了Java 编译器以何种方式处理注解。  

☆添加公共文档 Documented

在默认的情况下在使用javadoc自动生成文档时,注解将被忽略掉。如果想在文档中也包含注解,必须使用Documented为文档注解

☆设置继承 Inherited 

在默认的情况下,父类的注解并不会被子类继承。如果要继承,就必须加上Inherited注解。 

下面给出具体的实例:

注解类:

<span style="font-size:24px;">package cn.hncu.Annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE })//定义,可以使用方法,变量,
public @interface MyAnno {
	public String   getname() default "哈哈";//设置默认值,以后可以根据参数修改来进行不同的操作
//	public String   getname2() ;//不设置
}
</span>
使用 注解的简单类

/**
 * 
 */
package cn.hncu.Annotation;

/**
 * @author xinxin
 *
 */
@MyAnno
public class MyTestAnnoimp {
	@MyAnno
	private int age;
	private String name;
	
	public static void main(String[] args) {
		
	}
	@MyAnno
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "MyTestAnno [age=" + age + ", name=" + name + "]";
	}
	
	

}
对实用类进行判断是否用到了此注解

/**
 * 
 */
package cn.hncu.Annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.reflect.Method;

/**
 * @author xinxin
 *
 */
public class Demo {
	public static void main(String[] args) throws Exception {
		
		Class c1=Class.forName("cn.hncu.Annotation.MyTestAnnoimp");
		//判断类是否是注解类型,之前没有@Target(ElementType.TYPE),flg一直显示为false 
		boolean flg=c1.isAnnotationPresent(MyAnno.class);
		
		
		
		Method ms[] = c1.getDeclaredMethods();//判断方法是否是该种类型的注解
		for(Method m: ms){
			boolean boo = m.isAnnotationPresent(MyAnno.class);
			System.out.println("mm:"+boo+"  :: "+m.getName());
		}
		
		System.out.println(MyAnno.class);
		System.out.println(flg);
		if(flg){
			MyAnno my=	(MyAnno) c1.getAnnotation(MyAnno.class);//符合就输出做出相应的反应
		System.out.println(my.getname());
		//得到相应用户名之后就可以作出相应的事了
			}else{
			System.out.println("nonono");
		}
	}
}


你可能感兴趣的:(annotation,java注解)