注解

目录

 

1、注解

1.1 注解,或者叫注释类型,英文单词是Annotation

1.2 注解Annotation是一种引用类型。编译之后也是生成xxx.class文件

1.3 怎么自定义注解呢?语法格式?

1.4 注解怎么使用?用在什么地方?

1.5 JDK内置了那些注解?

1.6 元注解

1.7 注解在开发中有什么用?


1、注解

1.1 注解,或者叫注释类型,英文单词是Annotation

1.2 注解Annotation是一种引用类型。编译之后也是生成xxx.class文件

1.3 怎么自定义注解呢?语法格式?

@interface 注解类型名{ }

1.4 注解怎么使用?用在什么地方?

  1. 注解使用时的语法格式为:@注解类型名

  2. 注解可以出现在类上、属性上、方法上、变量上等……还可以出现在注解类型上

1.5 JDK内置了那些注解?

 

1.6 元注解

用来标注“注解类型”的 “注解” 叫做“元注解”

注解(动词)注解(名词)的 注解(名词) 叫做“元注解”

 

常见的元注解有哪些?

  • Target注解:用来标注“注解类型”的“注解”,这个Target注解用来标注“被标注的注解”可以出现在哪些位置上?

    • @Target(ElementType.METHOD):表示“被标注的注解”只能出现在方法上

    • @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}):表示该方法可以出现在:构造方法上,字段是,局部变量上,方法上,类上……

  • Retention注解:用来标注“注解类型”的“注解”,这个Retention注解用来标注“被标注的注解”最终保存到哪。

    • @Retention(RetentionPolicy.SOURCE):表示该注解只被保留在java源文件中

    • @Retention(RetentionPolicy.CLASS):表示该注解只被保存在class文件中

    • @Retention(RetentionPolicy.RUNTIME):表示该注解只被保存在class文件中,并且可被反射机制读取

 
/*
 @Override这个注解只能注解方法
 @Override这个注解是给编译器参考的,和运行阶段没关系
 凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写,则编译器报错
  */
 ​
 //@Override
 public class AnnotationTest02 {
 //    @Override
     private int no;
     @Override
     public String toString(){
         return  "toString";
     }
 }
 

自定义注解:

 public @interface MyAnnotation {
     /*
     我们通常在注解中可以定义属性值,一下这个是MyAnnotation的name属性
     看着像一个方法,但实际上我们称之为属性name
      */
     String name();
 ​
     //颜色属性
     String color();
 ​
     //年龄属性
     int age() default 25;
 }
 public class AnnotationTest03 {
 ​
     public static void main(String[] args) {
         //在本类中执行过时的方法,编译器不报过时信息,且不显示下划线
         AnnotationTest03 test03 = new AnnotationTest03();
         test03.doSome();
     }
     @Deprecated
     public void doSome(){
         System.out.println("do something!");
     }
     @Deprecated
     public static void doOther(){
         System.out.println("do other……");
     }
 }
 // //在其他类中执行过时的方法,编译器报过时信息,且显示下划线
 class T{
     public static void main(String[] args) {
         AnnotationTest03 test03 = new AnnotationTest03();
         test03.doSome();
         AnnotationTest03.doOther();
     }
 ​
 }

测试:

 
public class MyAnnotationTest {
     //报错的原因:如果一个注解当中有属性,那么必须给属性赋值
 ​
   /*  @MyAnnotation
     public void doSome(){
 ​
     }*/
 ​
     //解决:指定name属性的值就好了
     //@MyAnnotation(属性名 = 属性值,属性名 = 属性值,属性名 = 属性值)
     //如果只有一个属性,且属性名为value,则属性名可以省略
 ​
     @MyAnnotation(name = "zhangsan",color = "black")
     public void doSome(){
 ​
     }
 }

 

注解当中的属性可以是哪种类型?

属性类型可以是:byte、short、int、long、float、double、boolean、char、String、Class、枚举类型以及以上每一种的数组形式

如果数组中只有一个元素:大括号可以省略

 

 

1.7 注解在开发中有什么用?

注解在开发中等同于一种标记

如果元素上没有这个标记怎么办,如果有这个标记怎么办

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值