JAVA注解与反射:看这篇文章就够了1

简介: JAVA注解与反射:看这篇文章就够了

一、Java注解

1.注解的定义

Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称为元数据)。

Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。

Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。

2.注解与注释的区别

注解是对代码的解释和说明,其目的是提高程序代码的可读性。注解是可以被编译器打包进入class文件。

注释只存在于java源代码中,对于编译和运行没有任何作用,也不会被编译到class文件中。注释是给程序员看的,编译器与JVM都不需要知道它。

3.注解的应用

1.生成文档这是最常见的,也是java 最早提供的注解;

2.在编译时进行格式检查,如 @Override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出;

3.跟踪代码依赖性,实现替代配置文件功能,比较常见的是spring 2.5 开始的基于注解配置,作用就是减少配置;

4.在反射的 Class, Method, Field 等函数中,有许多于 Annotation 相关的接口,可以在反射中解析并使用 Annotation。

4.注解的分类

标准注解

1.常用的三种:

 

//@Override     重写的注解
    @Override
    public String toString() {
        return super.toString();
    }
    //@Deprecated       不推荐程序员使用,但是可以使用,或者存在更好的方法
    @Deprecated
    public static void test1() {
        System.out.println("Deprecated");
    }
    //@SuppressWarnings("关键字")     镇压警告(不推荐使用),将警告消除
    @SuppressWarnings("all")
    public void test2() {
        List list = new ArrayList();
    }
    public static void main(String[] args) {
        test1();
    }
关键字 被抑制的警告类型
all 抑制所有警告
deprecation 抑制使用了过时的类或方法的警告
fallthrough 抑制switch块中没有break语句的警告
finally 抑制finally块中不能正常完成的警告
rawtypes 抑制没有使用泛型的警告
serial 抑制可序列化类没有使用序列化ID的警告
unchecked 抑制未检查操作的警告

2.函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。(附加)

元注解

1.Target

枚举值 注解能够被应用的地方
ElementType.ANNOTATION_TYPE 注解类型的声明
ElementType.CONSTRUCTOR 构造方法的声明
ElementType.FIELD 属性的声明
ElementType.LOCAL_VARIABLE 局部变量的声明
ElementType.METHOD 方法的声明
ElementType.PACKAGE 包的声明
ElementType.PARAMETER 方法参数的声明
ElementType.TYPE 类,接口以及枚举的声明


3.Documented

4.Inherited

code:

@MyAnnotation
public class test02 {
    @MyAnnotation
    public void test02() {
    }
}
//自定义一个简单的注解
    //@Target       表示我们的注解可以用在哪些地方
    //@Retention        表示我们的注解在什么地方有效
    //@Documented       表示是否将我们的注解生成在Javadoc中
    //@Inherited        表示子类可以继承父类的注解
@Target(value = {ElementType.METHOD, ElementType.TYPE})
    @Retention(value = RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
@interface MyAnnotation{
}

自定义注解

自定义注解的格式

// 元注解
public @interface 注解名称{
    // 属性列表
}

示例:

//自定义注解
public class test03 {
    //注解可以显示赋值, 如果没有默认值,我们就必须给注解赋值
    //注解参数的顺序随意
    @MyAnnotation2(age = 18, name = "jacky")
    public void test() {
    }
    @MyAnnotation3("jacky")
    public void test2() {
    }
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
    //注解的参数: 参数类型 + 参数名 + ();
    String name() default "";
    int age() default 0;
    int id() default -1;
    String[] schools() default {"peking university"};
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
    //如果注解参数为value赋值时可以直接写值
    String value();
}
目录
相关文章
|
14天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
50 7
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
64 3
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
97 43
Java学习十六—掌握注解:让编程更简单
|
19天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
55 5
|
25天前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
1月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
56 14
|
1月前
|
前端开发 Java
[Java]讲解@CallerSensitive注解
本文介绍了 `@CallerSensitive` 注解及其作用,通过 `Reflection.getCallerClass()` 方法返回调用方的 Class 对象。文章还详细解释了如何通过配置 VM Options 使自定义类被启动类加载器加载,以识别该注解。涉及的 VM Options 包括 `-Xbootclasspath`、`-Xbootclasspath/a` 和 `-Xbootclasspath/p`。最后,推荐了几篇关于 ClassLoader 的详细文章,供读者进一步学习。
36 12
|
1月前
|
Java
Java的反射
Java的反射。
26 2
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
79 4
|
2月前
|
存储 Java
[Java]反射
本文详细介绍了Java反射机制的基本概念、使用方法及其注意事项。首先解释了反射的定义和类加载过程,接着通过具体示例展示了如何使用反射获取和操作类的构造方法、方法和变量。文章还讨论了反射在类加载、内部类、父类成员访问等方面的特殊行为,并提供了通过反射跳过泛型检查的示例。最后,简要介绍了字面量和符号引用的概念。全文旨在帮助读者深入理解反射机制及其应用场景。
35 0
[Java]反射