黑马程序员_高新技术-JDK1.5新特性之注解

----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------
高新技术-JDK1.5新特性之注解
       在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道。以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,SpringStrutsHibernate这三个框架都有自己的XML格式的配置文件。这些配置文件需要与Java源代码保存同步,否则的话就可能出现错误。而且这些错误有可能到了运行时刻才被发现。把同一份信息保存在两个地方,总是个坏的主意。理想的情况是在一个地方维护这些信息就好了。其它部分所需的信息则通过自动的方式来生成。JDK 5中引入了源代码中的注解(annotation)这一机制。注解使得Java源代码中不但可以包含功能性的实现代码,还可以添加元数据。注解的功能类似于代码中的注释,所不同的是注解不是提供代码功能的说明,而是实现程序功能的重要组成部分。Java注解已经在很多框架中得到了广泛的使用,用来简化程序中的配置。

package cn.itcast.day2;

public class AnnotationTest {

	/**类名都是名词或形容词加名词
	 * 方法名都是动词加名词或动词
	 * @param args
	 */
	@SuppressWarnings("deprecation")//压缩警告,是向编译器发送消息
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.runFinalizersOnExit(true);
		Thread thread=new Thread();
		thread.stop();
		sayHello();
	}
	@Deprecated
	public static void sayHello(){
		System.out.println("hi,传志播客");
	}

}

注解可以加在包,类,成员变量,构造器,方法,方法的参数和局部变量上

注解的默认生存周期为编译时期Retention(RetentionPolicy.CLASS)

注解的生存周期有三种CLASS,RUNTIME,SOURCE

Deprecated  @Retention(RetentionPolicy.RUNTIME)

Override @Retention(RetentionPolicy.SOURCE)

SupperessWarnings @Retention(RetentionPolicy.SOURCE)

package cn.itcast.day2;

public @interface MetaAnnotation {
	String value();
}

package cn.itcast.day2;

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

import cn.itcast.day1.EnumTest;

@Retention(RetentionPolicy.RUNTIME)
// 原注解,这是说下面这个注解要保留到运行时期
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
public @interface ItcastAnnotation {

	String color() default "yellow";
	// 为注解添加属性,其实根接口是差不多的

	String value();
	// 当注解中只有一个属性value时,那么 在用的时候可以这么写 @ItcastAnnotation("111");
	
	int[] arrayattr() default {2,3,4};
	EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
	MetaAnnotation annotationattr() default @MetaAnnotation("lhm");
	Class<?> classattr() default ItcastAnnotation.class;
}

package cn.itcast.day2;

import java.util.Arrays;

import cn.itcast.day1.EnumTest;

@ItcastAnnotation(color = "red", value = "xyz", arrayattr = { 1, 2, 3 }, lamp = EnumTest.TrafficLamp.GREEN, 
					annotationattr = @MetaAnnotation("flx"), classattr = AnnotationTest.class)
public class AnnotationTest {

	/**
	 * 类名都是名词或形容词加名词 方法名都是动词加名词或动词
	 * 
	 * @param args
	 */
	@SuppressWarnings("deprecation")
	// 压缩警告,是向编译器发送消息
	@ItcastAnnotation("abc")
	// 当注解中只有一个value属性需要设置,那么就可以这样写,当数组属性中只有一个值时可以这样写arrayattr=1
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.runFinalizersOnExit(true);
		Thread thread = new Thread();
		thread.stop();
		sayHello();
		if (AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)) {
			ItcastAnnotation annotation = AnnotationTest.class
					.getAnnotation(ItcastAnnotation.class);
			System.out.println(annotation.color());
			System.out.println(annotation.value());
			System.out.println(Arrays.toString(annotation.arrayattr()));
			System.out.println(annotation.lamp());
			System.out.println(annotation.annotationattr().value());
			System.out.println(annotation.classattr().getName());
		}
	}

	@Deprecated
	public static void sayHello() {
		System.out.println("hi,传志播客");
	}

}

----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值