黑马程序员_JAVA学习笔记8

来源:互联网 发布:win7网络和共享打不开 编辑:程序博客网 时间:2024/06/05 22:32

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

注解 :  

@Override 注解表示子类要重写父类的对应方法。

@Deprecated 注解表示方法是不建议被使用的。

@SuppressWarnings({“unchecked”,” ”})  表示压制警告。里面是一个数组。

自义注解:当注解中的属性名为value时,在对其赋值时可以不指定属性的名称而直接写上属性值即可,除了value以外的其他值都需要使用name = value这种赋值方式,即明确指定给谁赋值。

当我们使用@interface关键字定义一个注解时,该注解隐含地继承了java.lang.annotation.Annotation接口,如果我们定义一个接口,并且让该接口继承自Annotation,那么我们所定义的接口依然还是接口不是注解,Annotation本身是接口而不是注解。可以与Enum类比。

默认值在CLASS阶段。

Override source阶段,压制检查也是在source阶段,过时在runtime阶段。

下面是自定义注解:

@Mo

public class AnnotationTeset {

@Mo

public static void main(String[] args) throws Exception{

//此处是用反射得到注解 

if(AnnotationTeset.class.isAnnotationPresent(Mo.class))

{

Mo m = AnnotationTeset.class.getAnnotation(Mo.class);

System.out.println(m);

}

 

}

}

下面是注解类:

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE,ElementType.METHOD})

public @interface Mo {

}

Target 里面 是注解要修饰的范围如类、方法等,其中类要用TYPE因为类有许多种如接口,等,所以JAVACLASS实现了一个叫Type的接口。

 

下面是复杂类型的注解:

@Mo(name = "Myong")

public class AnnotationTeset {

@Mo(name = "Myong123")

public static void main(String[] args) throws Exception{

//此处是用反射得到注解 

if(AnnotationTeset.class.isAnnotationPresent(Mo.class))

{

Mo m = AnnotationTeset.class.getAnnotation(Mo.class);

System.out.println(m);

System.out.println(m.aaa().length);

System.out.println(m.name());

System.out.println(m.cc());

}

}

}

下面是注解 Mo文件 :

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE,ElementType.METHOD})

public @interface Mo {

String name();

int[] aaa() default {1,2,3};

M cc() default @M("Myongyun");

}

下面是注解M

@Retention(RetentionPolicy.RUNTIME)

public @interface M {

String value();

}


 


0 0
原创粉丝点击