Java注解

简介: Java注解

1.注解的概念

(1)注释的概念:

说明程序,给计算机看的

(2)注解的定义:

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。注解的本质是标记,他所有的功能都依赖于对于这个注解解释性的代码,通常需要结合反射来编写解释性代码。

(3)作用分类:

①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】

使用javadoc 类名.java命令,打开index.html文件

②代码分析:通过代码里标识的注解对代码进行分析【使用反射】

③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

(4)注解目前而言最主流的应用就是代替配置文件,例如Spring、SpringBoot等,注解具有开发效率高,成本低的特点,缺点是耦合性高,不利于维护。

2.JDK中预定义的一些注解

(1)@Override:检测被该注解标注的方法是否是继承自父类(接口)的

(2)@Deprecated:该注解标注的内容,表示已过时

(3)@SuppressWarnings:压制警告(一般传递参数all)

(4)@FunctionalInterface:如果一个接口中只有一个抽象方法,则该接口可以使用该注解修饰

3.自定义注解

3.1 格式

元注解

public @interface 注解名称{

属性列表;

}

3.2 本质

public interface 类名 extends java.lang.annotation.Annotation{ }

3.3属性

属性指的是接口中的抽象方法

(1)属性的返回值类型有以下取值

①基本数据类型

②String

③枚举

④注解

⑤以上类型的数组

(2)定义了属性,在使用时需要给属性赋值

①如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值

②如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可

③数组赋值时,值使用大括号{}包裹。如果数组中只有一个值,则{}可以省略

3.4 元注解

元注解就是用于描述注解的注解

(1)@Target:描述注解能够作用的位置(@Target的值是枚举类ElementType中的值)

(2)@Retention:描述注解被保留在哪个阶段可以被反射机制读取到

实例:

@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
  public String name();
}

(3)@Documented:描述注解是否被抽取到api文档中

(4)@Inherited:描述注解是否被子类继承

3.5 在程序中使用(解析)注解

获取注解中定义的属性值

(1)获取注解定义的位置的对象(Class,Method,Field)

(2)获取指定的注解

getAnnotation(Class)

(3)调用注解中的抽象方法获取配置的属性值

3.6 注解应用需要的三个步骤

(1)编写注解

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE})
@Documented
public @interface MyAnnotation {
    public String name();
    public int age();//给变量设置默认值
    public String[] like();//定义一个数组变量
}

(2)在类上应用注解

@MyAnnotation(name = "tom",age = 5,like = {"金鱼", "鲤鱼"})
public class Cat {
    private String name;
    private int age;
    private String[] like;
// Getter/Setter,toString,构造方法

(3) 对应用了注解的类进行反射操作的类

public class AnnotationDemo {
    public static void main(String[] args) {
        Class<Cat> catClass = Cat.class;
        //        获取类上应用的的指定注解
        MyAnnotation annotation = catClass.getAnnotation(MyAnnotation.class);
        //        获取注解上变量值
        int age = annotation.age();
        String[] like = annotation.like();
        try {
            Cat cat = catClass.newInstance();
            cat.setAge(age);
            cat.setLike(like);
            System.out.println(cat);
        } catch (
                InstantiationException e) {
            e.printStackTrace();
        } catch (
                IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
3天前
|
Java
如何在Java中实现自定义注解和处理器
如何在Java中实现自定义注解和处理器
|
9天前
|
Java Spring
JAVA注解:传统与现代的完美结合,你的代码值得拥有!
【6月更文挑战第29天】Java注解,作为连接传统与现代的编程工具,简化企业级应用开发,提升代码可读性和维护性。通过自定义注解如`@Loggable`,可以将行为(如日志记录)与方法实现分离,减少模板代码。使用AOP(如Spring)处理注解,实现行为拦截,增强代码灵活性和可扩展性。拥抱Java注解,让代码更现代、更高效!
32 16
|
9天前
|
IDE Java 程序员
JAVA注解大揭秘:为何程序员都爱它如命?
【6月更文挑战第29天】Java注解是元数据机制,用于在代码中嵌入信息供编译器、IDE和工具使用。它们以`@`标识,可用于类、方法等,用于编译时检查、代码生成(如Lombok的`@Getter`、`@Setter`)、框架集成(如Spring的`@Autowired`)。程序员喜欢注解因其简洁性、可读性和可扩展性,能减少冗余代码并增强代码的可理解性。
27 15
|
9天前
|
IDE Java 编译器
JAVA注解,你的代码需要的一次“心灵按摩”!
【6月更文挑战第29天】Java注解是提升代码可维护性的关键,它们是编译器和IDE理解代码意图的特殊标记,不同于仅作解释的注释。注解可用于编译时检查(如@Override、@NotNull)、自动生成代码(Lombok的@Getter、@Setter)、框架集成(Spring的@Autowired、MyBatis的@Mapper)。通过注解,代码变得更简洁、功能更强大,为项目带来效率提升。尝试使用注解,赋予代码新生命!
23 12
|
3天前
|
Java 数据库连接 程序员
高效使用Java中的注解实现代码自动化处理
高效使用Java中的注解实现代码自动化处理
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
|
5天前
|
Java 编译器 数据库连接
Java中的注解机制及其应用
Java中的注解机制及其应用
|
5天前
|
Java Maven 开发者
Java中的注解处理器详解
Java中的注解处理器详解
|
7天前
|
Java API 数据安全/隐私保护
Java中使用注解的最佳实践
Java中使用注解的最佳实践
|
9天前
|
IDE Java 编译器
深入解析JAVA注解:元数据如何改变编程世界
【6月更文挑战第29天】Java注解,作为元数据机制,为代码增添上下文信息,改变编程方式。注解标记在类、方法等上,不直接影响执行,但为编译器等提供额外信息。分为元注解、编译时和运行时注解,用于元数据提供、代码简化、提高可读性及自动化。示例展示了定义`@Loggable`注解来标记日志记录方法。注解广泛应用于依赖注入、ORM、Web服务等,提升效率和灵活性,是现代Java开发的关键。未来其应用将更广泛。
19 3