狂神说-注解

什么是注解

注解与反射是所有框架的底层
注解不仅能给程序员看还能给计算机看
注解;Annotation
注释:Comment

Annotation是从JDK5.0开始引入的新技术.
Annotation的作用:
不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取.
Annotation的格式:
注解是以"@注释名"在代码中存在的,还可以添加一些参数值﹐例如:@SuppressWarnings(value=“unchecked”).
Annotation在哪里使用?
可以附加在package , class , method , field等上面﹐相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问

内置注解

在这里插入图片描述

在这里插入图片描述

元注解

在这里插入图片描述

package annotation;

import java.lang.annotation.*;

/**
 * Created by 此生辽阔 on 2021/7/6 9:40
 */
@MyAnnotation//自定义注解用在类上面
public class annoDemo {

    @MyAnnotation//自定义注解用在方法上面
    public void method1()
   {
       @MyAnnotation//自定义注解用在局部变量上面
       int a=0;
   }
    @MyAnnotation//自定义注解用在成员变量上面
   private static final int k=0;

    @MyAnnotation//自定义注解用在成员变量上面
    public String id;

    @MyAnnotation//自定义注解用在构造器上面
    public annoDemo(String id) {
        this.id = id;
    }
}
//Target表示我们的注解可以用在哪些地方
@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})//可以用在方法上和成员变量,构造器上面,TYPE表示类,接口后者参数说明
//@Retention表示注解在什么地方还有效,有RUNTIME/CLASS/SOURCE三个选项
//其中,RUNTIME>CLASS>SOURCE,就是说如果你定义为RUNTIME,那么这个注解在CLASS和SOURCE也是有效的
//但是如果你定义为SOURCE,就只在SOURCE有效
@Retention(value= RetentionPolicy.RUNTIME)

@Documented//表示是否将我们的注解生成在javaDoc中
@Inherited//表示子类可以继承父类的注解
@interface  MyAnnotation
{

}

下面报错就是因为@Target的value没加上ElementType.LOCAL_VARIABLE
在这里插入图片描述

测试javadoc的功能
在这里插入图片描述
下面都是自动生成的
在这里插入图片描述

我们点击annoDemo.html
在这里插入图片描述

另一个代码没有写@Documented,所以生成的html中没有注解信息
在这里插入图片描述

注解的Retention和RetentionPolicy的理解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}
 
public enum RetentionPolicy {
    //此注解类型的信息只会记录在源文件中,编译时将被编译器丢弃,也就是说
    //不会保存在编译好的类信息中
    SOURCE,
 
    //编译器将注解记录在类文件中,但不会加载到JVM中。如果一个注解声明没指定范围,则系统
    //默认值就是Class
    CLASS,
 
    //注解信息会保留在源文件、类文件中,在执行的时也加载到Java的JVM中,因此可以反射性的读取。
    RUNTIME
}

注解按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。

自定义注解

在这里插入图片描述

下面报错,我们要么在使用注解的时候传一个参数,要么在定义注解的时候就个name一个默认的值
在这里插入图片描述
①注解可以显示赋值,如果没有默认值,我们必须给注解赋值
在这里插入图片描述

在这里插入图片描述

package annotation.annotation;

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

/**
 * Created by 此生辽阔 on 2021/7/6 10:40
 */
public class MyAnno2 {
    @MyAnnotation2(age=1)
    public void test(){
    }
    @MyAnnotation3("111")//当注解只有一个参数成员时,可以不用写参数名字,直接复制
    public void test2(){
    }
}
@Target(value={ElementType.TYPE,ElementType.METHOD})
@Retention(value= RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
    String name() default "";
    int age();
    int od() default -1;//如果默认值为-1,代表不存在
    String[] schols() default {"清华大学"};
}
@interface MyAnnotation3{
    String value();
}

弹幕区

自定义注解其实挺有用的,你以后可以将事务啊,或者依稀儿童用的工具写成注解,之后哪里需要,你直接加个注解就完了

注解就是在你编程中有些代码可以通过注解来解释代码的含义,方便读懂代码
项目中注解可以用来验证登录,身份认证

推荐阅读

Java注解的Retention和RetentionPolicy

自定义注解之运行时注解(RetentionPolicy.RUNTIME)

这是一位大佬根据黑马的注解课程做的笔记【Java基础】 注解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值