java注解

本文详细介绍了Java注解的定义、使用及其应用场景。包括预定义注解如@Override、@Deprecated、@SuppressWarnings,以及如何自定义注解和使用元注解。通过示例展示了注解在实际开发中的作用。

       Annotation( 注解 ) 是 JDK5.0 及以后版本引入的一个特性 。 注解是(@interface) Java 的一个新的类型(与接口很相似 ) ,它与类(Class)、接口(interface)、枚举(enum)是在同一个层次。我们可以定义注解、声明注解、获得注解,并且根据获得的注解做相应的处理,许多框架都大量应用了注解


预定义注解

@Override  表示当前方法是覆盖父类的方法。被Override注解的方法必须在父类中存在同样的方法程序才能编译通过

@Deprecated  表示当前元素是不赞成使用的。

@SuppressWarnings 表示关闭一些不当的编译器警告信息。

            deprecation :过时的类或方法警告。例如:new Date().toLocal  

            unchecked :执行了未检查的转换时警告。例如 List list = new ArrayList  

            fallthrough :当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。  

            path :在类路径、源文件路径等中有不存在的路径时的警告。  

            serial :当在可序列化的类上缺少 serialVersionUID 定义时的警告。  

            finally :任何 finally 子句不能完成时的警告。  

            all :关于以上所有情况的警告

example

@SuppressWarnings (value={"unchecked"})
public void myMethod()
{
    List wordList = new ArrayList();
    wordList.add("foo");
}

自定义注解

注解的定义和接口差不多,只是在interface前面多了一个@

public @interface MyAnnotation
{
}

/*

 * 元注解就是用来对注解类进行注解的注解

 * 元注解@Target,@Retention,@Documented,@Inherited

 * 

 *     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:

 *         ElemenetType.CONSTRUCTOR 构造器声明

 *         ElemenetType.FIELD 域声明(包括 enum 实例)

 *         ElemenetType.LOCAL_VARIABLE 局部变量声明

 *         ElemenetType.METHOD 方法声明

 *         ElemenetType.PACKAGE 包声明

 *         ElemenetType.PARAMETER 参数声明

 *         ElemenetType.TYPE 说明该注解只能被声明在类,接口(包括注解类型)或enum声明之前

 *         

 *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:

 *         RetentionPolicy.SOURCE 指定注解只保留在一个源文件当中,注解将被编译器丢弃

 *         RetentionPolicy.CLASS 指定注解只保留在一个 class 文件中,注解在class文件中可用,但会被VM丢弃

 *         RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

 *         

 *     @Documented 将此注解包含在 javadoc 中

 *     

 *     @Inherited 允许子类继承父类中的注解

 *   

 */


example

package annotation.Test;

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
 * 定义注解 Test 注解中含有两个元素 id 和 description description 元素 有默认值 "no description"
 */
public @interface Test {
	public int id();

	public String description() default "no description";
}

怎样使用注解

package annotation.Test;

import java.lang.reflect.Method;

public class Test_1 {
	/*
	 * 被注解的三个方法
	 */
	@Test(id = 1, description = "hello method_1")
	public void method_1() {
	}

	@Test(id = 2)
	public void method_2() {
	}

	@Test(id = 3, description = "last method")
	public void method_3() {
	}

	/*
	 * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
	 */
	public static void main(String[] args) {
		Method[] methods = Test_1.class.getDeclaredMethods();
		for (Method method : methods) {
			/*
			 * 判断方法中是否有指定注解类型的注解
			 */
			boolean hasAnnotation = method.isAnnotationPresent(Test.class);
			if (hasAnnotation) {
				/*
				 * 根据注解类型返回方法的指定类型注解
				 */
				Test annotation = method.getAnnotation(Test.class);
				System.out.println("Test( method = " + method.getName()
						+ " , id = " + annotation.id() + " , description = "
						+ annotation.description() + " )");
			}
		}
	}

}

output

Test( method = method_1 , id = 1 , description = hello method_1 )

Test( method = method_2 , id = 2 , description = no description )

Test( method = method_3 , id = 3 , description = last method )


另外一篇比较详细的博文

http://my.oschina.net/hongdengyan/blog/179732


转载于:https://my.oschina.net/hnuweiwei/blog/294654

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值