关于注解的一些知识点

文章详细介绍了Java中的注解(Annotation),包括其定义、自定义注解的语法、注解的使用位置,以及JDK内置的Deprecated和Override注解。此外,还重点讲解了元注解如Target和Retention的用途,Target用于指定注解的应用位置,Retention则控制注解的生命周期,决定其保留到什么阶段。
摘要由CSDN通过智能技术生成
package com.javase.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 关于注解:
 *     注解也叫注释类型,英文单词是:Annotation
 *
 *     注解Annotation是一种引用数据类型,编译之后也是生成 *.class文件。
 *
 *     自定义注解的语法格式:
 *        [修饰符列表] @interface 注解类型名{
 *
 *        }
 *
 *     注解的使用:
 *        第一:注解使用时的语法格式:   @注解类型名
 *        第二:注解可以出现在类上、属性上、实例方法上、静态方法上、构造方法上、变量上、
 *              接口上、枚举类型上、形参上......   注解还可以出现在注解类型上。
 *
 *     JDK内置了哪些注解呢?
 *         java.lang包下的注解类型:
 *         Deprecated:用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险
 *                     或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行时,编译器会发出警告。
 *
 *         Override:用 @Override注释的表示一个方法声明打算重写超类中的另一个方法声明。
 *                  凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。
 *                  该注解只是在编译阶段起作用,和运行阶段无关。
 *
 *    元注解:
 *       什么是元注解?  用来标注“注解类型”的“注解”,称为元注解。
 *
 *       常见的元注解有哪些?   Target   Retention
 *
 *            关于Target注解:这是一个元注解,用来标注“注解类型”的注解,用Target注解来标注“被标注的注解”可以出现在哪些位置上。
 *                  @Target(ElementType.METHOD): 表示“被标注的注解”只能出现在方法上。
 *                  @Target(ElementType.CONSTRUCTOR): 表示“被标注的注解”只能出现在构造方法上
 *                  @Target(ElementType.FIELD): 表示“被标注的注解”只能出现在属性上
 *                  @Target(ElementType.PACKAGE): 表示“被标注的注解”只能出现在包上
 *                  @Target(ElementType.TYPE): 表示“被标注的注解”只能出现在类上
 *                  ......
 *
 *
 *            关于Retention注解: 这是一个元注解,用来标注“注解类型”的注解,这个Retention注解用来标注“被标注的注解”最终保留在哪里。
 *                  @Retention(RetentionPolicy.SOURCE): 表示“被标注的注解”只被保留在java源文件中。
 *                  @Retention(RetentionPolicy.CLASS): 表示“被标注的注解”被保存在class文件中。
 *                  @Retention(RetentionPolicy.RUNTIME): 表示“被标注的注解”被保存在class文件中,并且可以被反射机制所读取。
 */

@Target({ElementType.TYPE,ElementType.METHOD})//该注解是元注解,该注解的属性value被省略了,该注解表示被
                                              // 它标注的@MyAnnotation01注解只能出现在类上、方法上。
@Retention(RetentionPolicy.RUNTIME)//该注解也是元注解,该注解的属性value也被省略了,该注解表示被它标注的
                                   // 注解@MyAnnotation01注解会保存在class文件中,并且可以被反射机制获取到。
public @interface MyAnnotation01 {
//    指定一个name属性
    String name();//这行代码表示注解中的属性,看起来好像方法,但实际上是注解中的属性
//    指定一个value属性
    String value() default "河北省秦皇岛市";//表示属性value的默认值是"河北省秦皇岛市"
}
package com.javase.annotation;

public @interface MyAnnotation02 {
//    指定一个value属性
    String value();
}
package com.javase.annotation;

/**
 * 使用注解:
 *     如果注解中有属性,那么在使用的时候需要对属性赋值,不然就会报错
 *     赋值方法:
 *         @注解名(注解属性名=属性值,注解属性名=属性值,......)
 *
 *         如果注解的属性名是:value,并且只有这一个属性,那么属性名可以省略,这里仅仅是value可以省略,其它名称都不可以省略。
 *
 *     注解中属性的类型可以是哪些呢?
 *         可以是:byte、short、int、long、float、double、boolean、char、String、enum(枚举类型)、Class
 *         以及以上每一种类型的数组形式。
 *
 *         如果属性的类型是数组的形式,那么属性值就要放到{}中,如果{}中只有一个值,那么{}可以省略。
 *
 */
public class AnnotationText01 {
    public static void main(String[] args) {

    }
    @MyAnnotation01(name = "zhangsan",value = "123")//这里的属性名除了value还有name,所以value不能省略
    public void doSome(){

    }
    @MyAnnotation01(name="王五")//如果某个属性有默认值,那么这个属性值可以省略不写(value属性有默认值,这里省略了)
    public void b(){

    }
    @MyAnnotation02("abc")//因为这里的属性名只有一个value,所以属性名value可以省略
    public void doOther(){

    }
    @MyAnnotation02(value = "haha")//不省略也可以
    public static void aVoid(){

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值