今天不想跑,所以才去跑|

凉白茶

园龄:2年4个月粉丝:19关注:7

2022-12-22 14:56阅读: 207评论: 0推荐: 0

注解

注解

  • 注解的理解:

    1. 注解(Annotation)也被称为元数据(Metadata),用于修饰包、类、方法、属性、构造器、局部变量等数据信息。
    2. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
    3. 在Java SE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在Java EE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替Java EE旧版中所遗留的繁冗代码和XML配置等。
  • 基本介绍:

    使用Annotation 时要在其前面增加 @ 符号,并把 Annotation 当成一个修饰符使用。用于修饰它支持阿程序元素。

    三个基本的 Annotation:

    1. @Override:限定某个方法,是重写父类方法,该注解只能用于方法。
    2. @Deprecated:用于表示某个程序元素(类,方法等)已过时。
    3. @SuppressWarnings:抑制编译器警告。

一、 @Override 注解

@Override:限定某个方法,是重写父类方法,该注解只能用于方法。

class Father {
public void fly() {
}
}
class Son extends Father {
//1. @Override 注解放在fly方法上,表示子类的fly方法重写父类的fly
//2. 如果这里没有写 @Override 还是会重写父类的fly
//3. 如果你写了 @Override注解,编译器就会去检查该方法是否真的重写了父类的方法
//如果的确重写了,编译通过,如果没有构成重写则编译错误
//4. 看看@Override的源码
//如果发现 @interface 表示 一个注解类
/*
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
*/
@Override
public void fly() {
System.out.println("Son fly....");
}
}
  • 补充说明:@interface 的说明,@interface 不是接口,是注解类 是jdk1.5 之后加入的。

  • @Override 使用说明

    1. @Override 表示是指定重写父类的方法(从编译层面验证),如果父类没有fly方法,或者没有重写方法,则会报错;

    2. 如果不写 @Override 注解,而父类仍有 public void fly(){},仍然构成重写;

    3. @Override 只能修饰方法,不能修饰其他类,包,属性等等;

    4. 查看 @Override 注解源码@Target(ElementType.METHOD),说明只能修饰方法;

      @Target(ElementType.METHOD)
      @Retention(RetentionPolicy.SOURCE)
      public @interface Override {
      }
    5. @Target 是修饰注解阿注解,称为元注解;

二、 @Deprecated 注解

@Deprecated:用于表示某个程序元素(类,方法等)已过时。

public class Deprecated_ {
public static void main(String[] args) {
A a = new A();
}
}
//1. @Deprecated 修饰某个元素,表示该元素已经过时了
//2. 即不再推荐使用,但是仍然可以使用
//3. 查看源码
/*
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
*/
//4. 可以修饰方法,类,字段,包,参数等等
//5. @Deprecated 可以做版本升级过渡使用
@Deprecated
class A{
public int n1;
public void hi(){}
}
  • @Deprecate 使用说明
    1. 用于修饰某个程序元素,表示该元素已经过时了;
    2. 可以修饰方法,类,字段,包,参数等等;
    3. @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE});
    4. @Deprecated 的作用可以做到新旧版本的兼容和过渡;

三、 @SuppressWarnings 注解

@SuppressWarnings:抑制编译器警告。

public class SuppressWarnings_ {
//1. 当我们不希望看到这些警告的时候,可以使用 @SuppressWarnings 注解来抑制警告信息
//2. 在{""}中,可以写入你希望抑制(不显示警告信息)
//3. 关于SuppressWarnings 作用范围是和你放置的位置相关
// 比如@SuppressWarnings放置在 main方法,那么一致警告的范围就是 main
// 通常我们可以放置具体大的语句,方法和类
//4. 看看 @SuppressWarnings 的源码
/*
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
*/
@SuppressWarnings({"rawtypes","unchecked","unused",})
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("mary");
int i;
System.out.println(list.get(1));
}
}
  • 使用说明

    all 抑制所有警告
    boxing 抑制装箱、拆箱操作时候的警告
    cast 抑制映射相关的警告
    dep-ann 抑制启用注释的警告
    deprecation 抑制过期方法警告
    fallthrough 抑制在 switch 中缺失 breaks 的警告
    finally 抑制 finally 模块没有返回的警告
    hiding 抑制相对于隐藏变量的局部变量的警告
    incomplete-switch 忽略不完整的 switch 语句
    nls 忽略非 nls 格式的字符
    null 忽略对 null 的操作
    rawtypes 使用 generics 时忽略没有指定相应的类型
    restriction 抑制禁止使用劝阻或禁止引用的警告
    serial 忽略在 serializable 类中没有声明 serialVersionUID 变量
    static-access 抑制不正确的静态访问方式警告
    synthetic-access 抑制子类没有按最优方法访问内部类的警告
    unchecked 抑制没有进行类型检查操作的警告
    unqualified-field-access 抑制没有权限访问的域的警告
    unused 抑制没被使用过的代码的警告
    • @SuppressWarnings 可以修饰的程序元素为 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,查看@Target。
    • 生成@SuppressWarnings 时,不用背,直接idea中点击左侧的黄色提示,就可以选择(注意可以选择指定生成的位置)。

四、JDK 的 元Annotation

  • 基本介绍:用于修饰为其他的Annotation
  • 元注解的种类
    1. @Retention:指定注解的作用范围,三种作用范围 SOURCE,CLASS,RUNTIME
    2. @Target:指定注解可以在哪些地方使用
    3. @Documented:指定该注解是否会在 javadoc 体现
    4. @Inherited:子类会继承父类注解

① @Retention 注解

  • 说明:只能用于修饰一个 Annotation 定义,用于指定该 Annotation 可以保留多长时间,@Retention 包含一个 RetentionPolicy 类型的成员变量,使用 @Retention 时必须为该 value 成员变量指定值。
  • @Retention的三种值:
    1. RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注解
    2. RetentionPolicy.CLASS:编译器将把注解记录在class文件中,当运行 Java程序时,JVM 不会保留注解。这是默认值
    3. RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行 Java程序时,JVM 会保留注解,程序可以通过反射获取该注解。

@Retention 注解内部

//以下为 @Retention 注解源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}

② @Target 注解

  • 基本说明:用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些元素,@Target 也包含一个名为 value 的成员变量
//以下为 @Target 注解源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
//修饰的元素的类型
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}

③ @Documented 注解

  • 基本说明:用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档,即在生成文档时,可以看到该注解。
  • 说明:定义为 @Documented 的注解必须设置 Retention 值为 RUNTIME。
//以下为 @Documented 注解源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

④ @Inherited 注解

基本说明:被他修饰的Annotation 将具有继承性,如果某个类使用了 @Inherited 修饰的 Annotation,则子类将自动具有该注解。

本文作者:凉白茶

本文链接:https://www.cnblogs.com/zh-Note/p/16990906.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   凉白茶  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程使用 AI 从 0 到 1 写了个小工具
· 快收藏!一个技巧从此不再搞混缓存穿透和缓存击穿
· AI 插件第二弹,更强更好用
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.