Java注解

1.常用的注解:
public class App_anno {
      //重写父类的方法
      @Override
      public String toString(){
            return super .toString();
     }
     
      //标记方法已经过时,但是依然可以使用
      @Deprecated
      public void func0(){
     }
     
      //抑制编译器警告
      @SuppressWarnings ({ "all" })
      public void func1(){
           List list = null ;
     }
     
      //自定义注解
      @Author (name = "zhangsan" , age = 0,from = { "湖北" , "十堰" })
      public void func2(){
           
     }
}
 
2.自定义注解
     
public @interface Author {
      /**
      * 自定义注解:
      * 注解的属性
      * 1.修饰为默认或public
      * 2.不能有方法体
      */
     String name();
      int age();
     String sex() default "男" ; //带默认的注解,使用的时候就可以不写此属性值
     String[] from(); //注解属性类型为数组
}
 
  • 注解属性的作用:原来写在配置文件中的信息,可以通过注解的属性进行描述。
  • Annotation 的属性声明方式:String name()或String[] likes();
  • 属性默认值声明方式:String name() default “xxx”;
  • 特殊属性value:如果注解中有一个名称value的属性,那么使用注解时可以省略value=部分,如@MyAnnotation(“xxx")
  • 特殊属性value[];
  • 枚举值之间使用逗号分隔
  • @MyAnnotation(name="jack",age=30,likes={"唱歌","跳舞"})
 
3. 元注解
元注解,表示注解的注解!
 
指定注解的可用范围:
@Target({
TYPE,    
FIELD,     字段
METHOD,  方法
PARAMETER,   参数
CONSTRUCTOR, 构造器
 LOCAL_VARIABLE  局部变量
})
 
// 元注解 - 2. 指定注解的声明周期
@Retention(RetentionPolicy. SOURCE )    注解只在源码级别有效
@Retention(RetentionPolicy. CLASS )      注解在字节码即别有效   默认值
@Retention(RetentionPolicy. RUNTIME )   注解在运行时期有效
 
例如:
//元注解1:定义注解的可用范围
@Target ( value = {ElementType. TYPE ,ElementType. FIELD ,ElementType. METHOD ,ElementType. PARAMETER ,
           ElementType. CONSTRUCTOR ,ElementType. LOCAL_VARIABLE })
//@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE})  规定只能在方法、字段、类上用
 
//元注解2:指定注解的生命周期
@Retention (RetentionPolicy. RUNTIME ) //运行级别有效(最高级别)
public @interface Author {
      /**
      * 自定义注解:
      * 注解的属性
      * 1.修饰为默认或public
      * 2.不能有方法体
      */
     String name();
      int age();
     String sex() default "男" ; //带默认的注解,使用的时候就可以不写此属性值
     String[] from(); //注解属性类型为数组
}
 
4.通过反射来获取注解信息
//通过反射来获取注解信息
      @Test
      @Author (name = "小王" , age = 21,from = { "湖北" , "十堰" })
      public void func3() throws Exception{
            //获取注解信息:name,age,from
            Class clazz = this .getClass();
            //1.先获取代表方法的method
           Method m = clazz.getMethod( "func3" );
            //2.在获取方法上的注解
            Author author = m.getAnnotation( Author . class );
           System. out .println(author.name());
           System. out .println(author.age());
           System. out .println(author.from()[0]);
     }

转载于:https://www.cnblogs.com/wwha/p/5588910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值