黑马程序员_注解

来源:互联网 发布:工程控制系统仿真软件 编辑:程序博客网 时间:2024/05/17 06:26
 ------- android培训java培训、期待与您交流! ----------
注解:
       了解和入门注解的应用:
                代码示例:

                      
              
  由上面的例子可以看出当执行一切过时的方法时,Eclipse会自动划线,提示开发人员此方法已过时,建议不要调用
                此时如果在DOS命令行下运行,则会出现注意事项提醒:使用的方法已过时,如果需要了解详细信息,请使用:-Xlint:deprecation重新编译。
        @SuppressWarnings("desprecation")
                此时,在main方法上添加一个注解:@SuppressWarnings("deprecation"),此注解的作用就是告诉编译器,虽然我用的方法过时了,但是我还是坚持要用,你
                就不要再提示了。

        @Deprecated
                有时候我们写的方法被别人调用了,但是如果这个方法有一些地方需要修改,可是如果我们修改了又会影响以前已经调用这个方法的程序。

这时候我们可以把这个方法设置为过时,然后重新写一个方法,这时候就需要用到@Deprecated注解。

例如:

public class AnnotationTest {public static void main(String[] args) {sayHello();}@Deprecatedpublic static void sayHello() {System.out.println("hi,黑马");}}<span></span>

                由上面的示例可以看到,我们的sayHello方法可以通过@Deprecated注解标记为过时,然后调用者调用该方法的地方就会被MyEclipse划上横线作为过时的提示。  
       
@Override
               
有时候我们写的某些方法需要覆盖父类的方法,但是可能方法名或者参数会出现不小心写错的情况。这时候就可以为这个方法打上@Override注解,如果有任何差错,Eclipse
                  就会报错。

        总结:
                1、注解相当于一种标记,在程序中加了注解就相当于在程序上打了某种标记,没加,则相当于没有这种标记,以后,Javac编译器,开发工具和其他程序可以
                用反射来了解你的类及各种元素上有无任何标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上;
                2、看Java.long包,可以看到JDk中提供的最基本的annotation;
                3、一个注解就是一个类,使用注解,就相当于创建了一个类的实例对象;
                4、注解是JDK1.5的新特性。
注解的应用结构图:
               
        注意:注解就相当于你的源程序中要调用的一个类,要在源程序中应用某个注解,得先准备好注解这个类。就像你要调用这个类,得先有开发好的这个类。
        创建注解类的步骤:
                在Java透视图中,选择new--->Annotation;  如图所示:
                   
                点击FInish完成创建。
        代码示例:         
//注解类public @interface itheimaAnnotation {}//应用了注解的类@itheimaAnnotationpublic class AnnotationTest { public static void main(String[] args) { boolean falg = AnnotationTest.class. isAnnotationPresent(itheimaAnnotation.class); if (falg){ itheimaAnnotation heimaannotation =  AnnotationTest.class. getAnnotation(itheimaAnnotation.class); System.out.println(heimaannotation); } } } 
             执行之后,控制台并没有打印出任何信息,原因是因为@HeiMaAnnotation注解的Retention元注解默认值RetentionPolicy.CLASS,也就是说@HeiMaAnnotation注解在运行的时
                候已经被过滤掉了。解决这个问题的方式就是
将@HeiMaAnnotation的RetentionPolicy元注解值设置为RetentionPolicy.RUNTIME。                 

       注意:元注解就是在注解上添加的注解。@Retention元注解有三种取值:RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME,分别对应:Java源文件-->class

                文件-->内存中的字节码。

          更改之后为:
import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;//注解类@Retention(RetentionPolicy.RUNTIME)public @interface itheimaAnnotation {}
         在执行程序,则打印为:@com.itheima_07.itheimaAnnotation();
        @Override、@SuppressWarnings和@Deprecated这三个注解的@Retention元注解的value属性值:
        @Override------->@Retention中的SOURCE属性;@SuppressWarnings-------->@Retention中的SOURCE属性;@Deprecated------->@Retention中的RUNTIME属性。
        Taget:
                Target的默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错了。
  
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//注解类@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface itheimaAnnotation {}

                改为用数组方式设置{ElementType.METHOD,ElementType.TYPE}就不会报错了。

//注解类@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.TYPE})public @interface itheimaAnnotation {}
注解的属性:

        一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是黑马的学生,否则,就不是。如果还想区分出是黑马哪个班的学生,这时候可以为胸牌再增加一个属性来进行区分。

        加了属性的标记效果为:@itheimaAnnotation(color="red")。定义基本类型的属性和应用属性:在注解类中增加String color();  被添加的注解设置值:@itheimaAnnotation(color="red")。

        用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法 itheimaAnnotation itheimaannotation = AnnotationTest.class.getAnnotation(itheimaAnnotation.class);

        System.out.println(itheimaannotation.color());可以认为上面这个@itheimaAnnotationHeiMaAnnotaion类的一个实例对象。

        为属性指定缺省值:String color() default "Yellow";value属性:Stringvalue()default "黑马程序员";如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默

        认值或者你只有一个value属性),那么可以省略value=部分,例如:@itheimaAnnotation("CSDN社区")

        数组类型的属性

                int [] arrayAttr() default{1,2,3}; 被添加的注解设置属性值:@itheimaAnnotation(arrayAttr={2,3,4})。如果数组属性中只有一个元素,这时候属性值部分可以省略大括号。

        枚举类型的属性

                Lamp lamp() ; 被添加的注解设置属性值:@itheimaAnnotation(lamp=Lamp.GREEN)。

        注解类型的属性:

                MetaAnnotation annotationAttr() default@MetaAnnotation("黑马程序员"); 被添加的注解设置属性值:@itheimaAnnotation(annotationAttr = @MetaAnnotation("CSDN社区") ) 可以

                认为上面这个@itheimaAnnotationitheimaAnnotation类的一个实例对象,同样的道理,可以认为上面这@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:

MetaAnnotation ma =  itheimaAnnotation.annotationAttr();

System.out.println(ma.value());

------- android培训java培训、期待与您交流! ----------


0 0