深入浅出 Java 注解!

  • Created with IntelliJ IDEA.

  • @author : cunyu

  • @version : 1.0

  • @email : 747731461@qq.com

  • @website : https://cunyu1943.github.io

  • @date : 2021/6/20 10:04

  • @project : JavaWeb

  • @package : com.cunyu

  • @className : OverrideTest

  • @description :

*/

public class OverrideTest {

private Integer id;

private String name;

public OverrideTest(Integer id, String name) {

this.id = id;

this.name = name;

}

@Override

public String toString() {

final StringBuffer sb = new StringBuffer(“OverrideTest{”);

sb.append(“id=”).append(id);

sb.append(“, name='”).append(name).append(‘’');

sb.append(‘}’);

return sb.toString();

}

public static void main(String[] args) {

Integer id = 101;

String name = “村雨遥”;

OverrideTest overrideTest = new OverrideTest(id, name);

System.out.println(overrideTest);

}

}

@Override

@Deprecated

一般用在方法之前,表示该方法已经过期,不建议再继续使用(但是仍然有效,只不过可能有更新的版本,推荐使用更新的版本)。

package com.cunyu;

/**

  • Created with IntelliJ IDEA.

  • @author : cunyu

  • @version : 1.0

  • @email : 747731461@qq.com

  • @website : https://cunyu1943.github.io

  • @公众号 : 村雨遥

  • @date : 2021/6/20 10:07

  • @project : JavaWeb

  • @package : com.cunyu

  • @className : DeprecateTest

  • @description :

*/

public class DeprecateTest {

@Deprecated

public static void sayHello() {

System.out.println(“Hello World!”);

}

public static void newSayHello() {

System.out.println(“Hello,Welcome to Java !”);

}

public static void main(String[] args) {

sayHello();

newSayHello();

}

}

@SuppressWarnings

表示忽略警告信息,常用的值以及含义如下表:

| 值 | 描述 |

| — | — |

| deprecation | 使用了不赞成使用的类或方法时的警告 |

| unchecked | 使用了未经检查的转换时的警告 |

| fallthrough | 当 switch 程序块直接通往下一种情况而没有 break 时的警告 |

| path | 在类路径、源文件路径等中有不存在的路径时的警告 |

| serial | 当在可序列化的类上缺少 serialVersionUID 定义时的警告 |

| finally | 任何 finally 子句不能正常完成时的警告 |

| rawtypes | 泛型类型未指明 |

| unused | 引用定义了,但是没有被使用 |

| all | 关闭以上所有情况的警告 |

package com.cunyu;

import java.util.ArrayList;

import java.util.List;

/**

  • Created with IntelliJ IDEA.

  • @author : cunyu

  • @version : 1.0

  • @email : 747731461@qq.com

  • @website : https://cunyu1943.github.io

  • @公众号 : 村雨遥

  • @date : 2021/6/20 10:07

  • @project : JavaWeb

  • @package : com.cunyu

  • @className : SuppressWarningsTest

  • @description :

*/

public class SuppressWarningsTest {

@SuppressWarnings(“unchecked”)

public static void main(String[] args) {

String item = “村雨遥”;

@SuppressWarnings(“rawtypes”)

List items = new ArrayList();

items.add(item);

System.out.println(items);

}

}

自定义注解


格式

我们可以使用 @interface 来自定义注解,其格式如下:

public @interface AnnotationName{

// 属性列表

……

}

一个简单的示例如下,其中 AnnoDemo 代表着我们自定义注解的名称,而 name()age()score() 则分别表示自定义注解的三个属性,而且我们利用关键字 default 对每个属性都赋予了默认值。

public @interface AnnoDemo{

String name() default “村雨遥”;

int age() default 20;

float score() default 60.0f;

}

原理

注解本质上相当于一个接口,它默认继承自 java.lang.annotation.Annotation

public interface AnnotationName extends java.lang.annotation.Annotation{}

参数

注解的参数类似于无参的方法,通常我们推荐用 default 来设定一个默认值,对于方法的基本要求通常有如下几点:

  1. 方法的返回值类型不可以是 void

  2. 如果定义了方法,那么在使用时需要给方法进行赋值,赋值的规则如下:

  3. 若定义方法时,使用了关键字 default 对方法赋予了默认初始值,那么在使用注解时,可以不用对方法进行再次赋值;

  4. 若只有一个方法需要赋值,且方法名为 value,那么此时 value 可以省略,直接定义值即可;

  5. 数组赋值时,值需要用大括号 {} 包裹,若数组中只有一个值,那么此时 {} 可以省略;

public @interface AnnoDemo{

String name() default “村雨遥”;

int age() default 20;

float score() default 60.0f;

}

如上述例子中,name()age()score() 就是我们自定义注解的参数。而当我们要是用该注解时,则通过如下方式来对参数进行赋值。

@AnnoDemo(name = “村雨遥”, age = 26, score = 95.0f)

public class Demo{

……

}

元注解


定义

所谓元注解(meta annotation),就是可以用来修饰其他注解的注解。

常用的元注解

  1. @Target

描述注解所修饰的对象范围,其取值主要有如下几种:

| 值 | 说明 |

| — | — |

| ElementType.TYPE | 表示可以作用于类或接口 |

| ElementType.FIELD | 表示可以作用于成员变量 |

| ElementType.METHOD | 表示可以作用于方法 |

| ElementType.CONSTRUCTOR | 表示可以作用于构造方法 |

| ElementType.PARAMETER | 表示可以作用于方法的参数 |

@Target(ElementType.TYPE)

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

| ElementType.PARAMETER | 表示可以作用于方法的参数 |

@Target(ElementType.TYPE)

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

[外链图片转存中…(img-N9L8EmNj-1714739350057)]

[外链图片转存中…(img-TSLUFDgT-1714739350057)]

[外链图片转存中…(img-8GEZHxzr-1714739350057)]

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

[外链图片转存中…(img-Uo5g9NK2-1714739350058)]

[外链图片转存中…(img-kWF2Ympu-1714739350058)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值