黑马程序员_注解

 ------- android培训java培训、期待与您交流! ----------
注解:
       了解和入门注解的应用:
                代码示例:

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

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

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

例如:

public class AnnotationTest {
	public static void main(String[] args) {
		sayHello();
	}
	@Deprecated
	public 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 {

}

//应用了注解的类
@itheimaAnnotation
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值