Java面试题:什么是Java中的注解以及如何自定义注解?举例说明注解的经典用法

简介: Java面试题:什么是Java中的注解以及如何自定义注解?举例说明注解的经典用法

Java中的注解(Annotation)是JDK 5.0及以后版本引入的一种注释机制,用于为代码添加元数据。注解本身不会影响代码的执行,但可以通过反射等机制在运行时读取注解信息,从而改变代码的行为。注解是代码的一种元数据,可以为编译器、工具或其他应用程序提供信息。


自定义注解的步骤如下:

  1. 使用@interface关键字定义注解。
  2. 在注解中定义元素(相当于注解的属性),使用数据类型作为元素类型,并使用default为元素指定默认值。
  3. 注解可以定义在类、方法、字段、参数等上面。

下面是一个自定义注解的例子:

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

// 定义一个名为MyAnnotation的注解
@Target(ElementType.METHOD) // 注解可以作用在方法上
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时保留,可以通过反射获取
public @interface MyAnnotation {
    // 定义一个名为value的元素,默认为"Hello World"
    String value() default "Hello World";
}

注解的经典用法有很多,以下是一些例子:

  1. 标记注解:例如,Java自带的@Override注解,用于表示一个方法是重写了父类的方法。编译器会检查该方法是否确实重写了父类的方法,如果没有,则报错。
public class MyClass extends ParentClass {
    @Override
    public void myMethod() {
        // 方法体
    }
}
  1. 配置注解:例如,Spring框架中大量使用了注解进行配置,如@Autowired用于自动装配bean,@Service@Controller@Repository等用于标识bean的类型。
@Service
public class MyService {
    // ...
}
  1. 元数据注解:例如,Hibernate ORM框架使用注解来描述Java类与数据库表之间的映射关系。
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class MyEntity {
    @Id
    private Long id;
    // ...
}
  1. 自定义注解用于代码检查或生成:开发者可以根据需要自定义注解,并在编译时或运行时通过工具检查注解或根据注解生成代码。例如,可以使用自定义注解来标记需要进行特定处理的代码段,然后编写工具来扫描这些注解并执行相应的处理。

总之,注解为Java开发提供了更灵活、更强大的代码描述和配置能力,使得开发者可以更加高效地编写和维护代码。

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
10天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
10天前
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
|
28天前
|
前端开发 Java 程序员
面试官刁钻提问?轻松应对 break、continue 和 return 的巧妙用法
小米,一位技术博主,针对 Java 面试中常见的 `break`、`continue` 和 `return` 关键字进行了详细讲解。通过打怪故事和代码实例,解释了它们的使用场景及注意事项,帮助读者更好地理解和应用这些控制语句。
42 12
面试官刁钻提问?轻松应对 break、continue 和 return 的巧妙用法
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
83 14
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
2月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
37 6
|
8月前
|
安全 Java 编译器
Java其他: 什么是Java中的注解(Annotation)?
Java其他: 什么是Java中的注解(Annotation)?
87 0
|
SQL XML SpringCloudAlibaba
Java独有特性:注解(annotation)
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它本身并不起任何作用,可以说有它没它都不影响程序的正常运行,注解的作用在于**「注解的处理程序」**,注解处理程序通过捕获
176 0