首页 > 编程语言 >【Java基础面试题046】Java中的注解原理是什么?

【Java基础面试题046】Java中的注解原理是什么?

时间:2024-12-25 09:26:57浏览次数:5  
标签:面试题 Java introduce MyAnnotation public 注解 046 RUNTIME class

注解其实就是一个标记,是一种提供元数据的机制,用于给代码添加说明信息。可以标记在类上、方法上、属性上等,标记自身也可以设置一些值。

注解本身不影响程序的逻辑执行,但可以通过工具或框架来利用这些信息进行特定的处理,如代码生成、编译时检查、运行时处理等。

扩展知识

自定义注解

注解的定义使用@interface关键字。

  • @interface用来声明一个注解。
  • value是注解的一个成员变量,default关键字可以为成员变量设置默认值。
  • age也是一个成员变量,但没有默认值,所以在使用时必须提供这个值。

处理注解

  • 编译时处理:使用javax.annotation.processing 包进行注解处理器的开发
  • 运行时处理:使用反射机制访问注解,通过Class.getAnnotation()或Field.getAnnotation()等方法获取注解信息

元注解

Java提供了四种元注解来帮助定义其他注解:

  • @Retention: 定义注解的生命周期(SOURCE, CLASS, RUNTIME)。
  • @Target: 定义注解可以应用的目标(类、方法、字段等)。
  • @Documented: 标记注解是否应被包含在JavaDoc中。
  • @Inherited: 允许子类继承父类中的注解。

注解的三大保留策略

SOURCE:注解只存在于源码中,在编译时被丢弃

CLASS:注解只存在编译期,也就是编译后的.class文件中,但运行时不会被JVM加载

RUNTIME:注解在整个生命周期内都保留,运行时可以通过反射获取

例如这个注解,就是专门给编译器用的,class文件是不会有这个注解的

再比如Spring的Autowired,是RUNTIME的,在运行时可以通过反射获取注解的信息

Target

  • TYPE:类、接口、注解或枚举
  • FIELD:字段(包括枚举常量)
  • METHOD:方法
  • PARAMETER:方法参数
  • CONSTRUCTOR:构造方法
  • LOCAL_VARIABLE:局部变量
  • ANNOTATION_TYPE:注解类型
  • PACKAGE:包

运行时可以用反射获取注解的成员信息

public class AnnotationTest {
    public static void main(String[] args) {
        new AnnotationTest().introduce();
    }
    @MyAnnotation(age = 20)
    public void introduce(){
        Method introduce = null;
        try {
            introduce = AnnotationTest.class.getDeclaredMethod("introduce");
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        }
        if (introduce.isAnnotationPresent(MyAnnotation.class)){
            MyAnnotation annotation = introduce.getAnnotation(MyAnnotation.class);
            System.out.println(annotation.value() + "第一次遇见他,是" + annotation.age() + "岁");
        }
    }
}


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    // 定义注解的成员变量
    String value() default "王心妍";
    int age();
}

标签:面试题,Java,introduce,MyAnnotation,public,注解,046,RUNTIME,class
From: https://blog.csdn.net/lklalmq/article/details/144707020

相关文章

  • 面向对象程序设计JAVA学习总结
    第一章“初识JAVA与面向对象程序设计”廖利凯1、JAVA概述1.1计算机编程语言发展史机器语言:由微处理器理解和使用的二进制代码,是第一代编程语言,如0001111111101111等,直接控制硬件操作,但难记且不通用。汇编语言:用英文单词指令编写程序,是第二代编程语言,如MOVAX,1等,相比机......
  • JAVA期末通讯录
    写了挺久的,来CSDN记录一下应用软件:mysql,idea--------------------------------------------------------第一步:连接数据库直接去哔哩哔哩上面找mysql下载,下载完了之后我自身没有配什么环境,直接找的mysql怎么跟idea连接视频先用idea把mysql连接了之后再去看的mysql......
  • Java多态--上转型对象
    Java多态概念实现方式上转型对象概念多态:面向对象的三大特性之一多态一句话概括就是,一个类下面的不同子类的实例,对同一个参数输入,得到不同的输出举例:动物类下的小猫、小狗,两只动物分别拍一下,小猫输出“喵喵喵”,小狗输出“汪汪汪”。实现方式多态的方式:类的继承,方......
  • Java 变量和运算符
    Java变量和运算符1.变量(Variable)1.1何为变量1.2数据类型(DataTypes)1.2.1整型:byte、short、int、long1.2.2浮点类型:float、double1.2.3字符类型:char1.2.4布尔类型:boolean1.3变量的使用1.3.1步骤1:变量的声明1.3.2步骤2:变量的赋值1.4.基本数据类型变......
  • 直击要害!Java反序列化
                                 免责声明本系列工具仅供安全专业人员进行已授权环境使用,此工具所提供的功能只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用工具中的......
  • Java设计模式 —— 【结构型模式】组合模式(透明组合模式、安全组合模式)详解
    文章目录一、概述二、结构三、案例实现四、安全组合模式五、优缺点一、概述组合模式又名整体-部分模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形......
  • Java中的五种引用方式底层详解
        在GC算法的可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层关系存在,普通对象就不会被回收,而在Java中一共有五种引用关系。目录 强引用 (Strong Reference)软引用 (SoftReference)使用软引用实现简单缓存 一个实......
  • JAVA面向对象(二)封装
    数据的守护者封装是面向对象编程的重要特性之一,它将数据和操作数据的方法紧密地结合在一起,并对外部隐藏了数据的具体实现细节。这样做的好处是多方面的。一方面,它保护了数据的完整性。例如,在Person类中,如果我们直接将age成员变量暴露给外部,那么可能会出现不合理的赋值情况,比如设......
  • JavaDay2
    JavaDay2选择结构Switchpackageshujia.day02.ketang;importjava.util.Scanner;/*Switch选择语句:语句定义格式:switch(表达式){case常量值1:表达式1;break;case......
  • 【开源免费】基于SpringBoot+Vue.JS保密信息学科平台系统(JAVA毕业设计)
    本文项目编号T112,文末自助获取源码\color{red}{T112,文末自助获取源码}......