Java注解解释—浅显易懂(初学者必看)


前言

今天在学习java的时候,突然好奇@Override是干什么用的,在查阅资料后,打开了一扇新的大门,那就是Java注解。


一、注解是什么?

首先,说一下他的概念:Java注解是一种元数据,它为源代码提供了一种形式化的元信息描述。注解在Java源码中以@符号开头,它们可以附加到类、方法、字段、参数、包等程序元素上,编译器、开发工具和运行时环境可以通过解析这些注解信息来进行特定的操作。

事实上这样说,很难让初学者理解,于是在借鉴了别的博主的解释后,我做出了如下总结:

注解在编程领域就像现实生活中给物品贴标签或做批注一样,是为了给代码中的特定元素(如类、方法、变量等)添加额外的信息或指示。这些信息虽然不影响程序的基本执行逻辑,但可以让编译器、开发工具或运行时环境根据注解的内容来做出相应的处理或决策。

想象一下这样一个生活场景:

假设你正在经营一家咖啡店,你的菜单上有各种饮品,为了让厨师团队快速识别并制作顾客所需的饮料,你会在菜单上对每种饮品进行详细的标注,比如:

特浓咖啡 (@StrongCoffee)
低糖拿铁 (@LowSugarLatte)

这里的 “@StrongCoffee” 和 “@LowSugarLatte” 就像是编程中的注解,它们虽然不是菜单本身的一部分,但提供了额外的信息。在实际操作中,这些标注可能会指导厨师如何特别调配特浓咖啡,或者提醒他们在制作拿铁时使用较少的糖。

在Java编程中,注解的作用类似于此,比如使用 @Override 注解告诉编译器:“我正在重写父类中的某个方法,请帮我检查是否真的存在这个方法。” 使用 @Deprecated 注解则意味着:“这个方法即将过时,请不要在新的代码中使用它。” 这些注解就像是给代码元素贴上了标签,让软件工具能够更好地理解和处理代码。

注解主要有以下几个特点和应用场景:

提供编译时信息:编译器可以利用注解来检测错误或发出警告,例如 @Override 注解用于验证方法是否正确覆盖了父类方法。

编译期处理:Java提供了注解处理器(Annotation Processing Tool, APT)和JSR 269(javax.annotation.processing API)允许开发者编写自定义注解处理器,这些处理器可以在编译期间处理注解信息,生成额外的代码或资源。

运行时处理:通过Java反射API,程序可以在运行时获取类或方法上的注解,进而决定程序的行为。

库支持:许多Java库和框架(如Spring框架、Hibernate等)广泛使用注解来简化配置,比如用于依赖注入、事务管理、数据库映射等。

二、举例

1.@Override

@Override 是Java中的一个预定义注解,主要用于标记在一个方法声明之前,表明这个方法是重写父类或者实现接口中的某个方法。当程序员使用 @Override 注解时,编译器会在编译阶段检查标记的方法是否确实存在继承树的父类或实现的接口中。如果不存在对应的方法,则会抛出编译错误,这有助于防止因拼写错误或其他原因导致的无意间的未正确重写。

代码如下:

public class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

public class Dog extends Animal {
    @Override // 表明此方法重写了父类Animal中的makeSound方法
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

在这个例子中,Dog 类中的 makeSound() 方法使用了 @Override 注解,告诉编译器和阅读代码的人,这是对 Animal 类中同名方法的明确重写。如果 Animal 类没有 makeSound() 方法,那么在使用 @Override 注解后,这段代码将无法通过编译。

2.常见的Java预定义注解

@Override: 标记在方法上,表明该方法重写了父类的方法。
@Deprecated: 标记在即将弃用的类、接口、方法或字段上,编译器会产生警告信息。
@SuppressWarnings: 用于压制编译器产生的特定警告。
@FunctionalInterface: 标记在接口上,表明这是一个函数式接口,即该接口有一个抽象方法(在Java 8及以上版本)。
自定义注解可以由开发者创建,通过@Retention、@Target等元注解来定义注解的保留策略(是否保留在编译后的class文件中、是否能在运行时访问等)和应用范围(能否用于类、方法等)。


总结

如果大家想要更深入了解注解的话,向大家推荐这两篇博客,我觉得挺详细的
第一个是(https://zhuanlan.zhihu.com/p/37701743)
第二个是(https://blog.csdn.net/KingBoyWorld/article/details/105337011)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值