@Retention(RetentionPolicy.RUNTIME)//@Retention元注释 说明该注释 存活期间在 运行期间
@Target( {ElementType.TYPE,ElementType.METHOD})//@Target元注释 说明该注释 适用于 类接口枚举和方法上
public @interface myAnnotation {

	//为注释定义属性
	String name() default "ztt";//default定义属性默认值 缺省值
	String value();
	//数组类型 属性
	int[] array() default {1,3,5};
	//枚举类型属性
	TrafficLamp lamp() default TrafficLamp.GREE;//独立的枚举
	EnumDemo.TrafficLamp TLamp() default EnumDemo.TrafficLamp.GREE;//从属于类的枚举
	//注释类型属性
	annFormy ann() default @annFormy("hehe");
	//class对象类型属性
	Class<?> clazz() default String.class;
	//Class<String> clazz() default String.class; 区别在于 该class对象 只能表示 String类(String的class对象)
}

测试

@myAnnotation(name = "flx", value = "ggo",array={1,2},lamp=TrafficLamp.GREE,ann=@annFormy("annotation"),clazz=int.class)//小括号 括起来 注释的属性
public class annotationTest {
	@myAnnotation(name = "hxl", value = "ggo",array={1,2},clazz=int.class)//小括号 括起来 注释的属性
	@SuppressWarnings("deprecation") 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.runFinalizersOnExit(true);
		//通过 反射 获取 注释对象  
		myAnnotation myann = annotationTest.class.getAnnotation(myAnnotation.class);
		System.out.println(myann.name());
		System.out.println(myann.value());
		System.out.println(myann.array().length);
		System.out.println(myann.lamp().next().name());
		System.out.println(myann.ann().value());
		System.out.println(myann.clazz().getName());
		
		//将2进制数10000转为10进制数 16  将radix进制数string转为10进制数 (返回int)
		System.out.println(Integer.parseInt("10000", 2));//16
		System.out.println(Integer.toBinaryString(2));//16
	}

}