java基础——注解

注解

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

基本的注解

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

三个基本的Annotation:

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

@Override注解

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

class Father{
    public void fly() {
        System.out.println("父类方法");
    }
}
class Son extends Father{
    @Override
    public void fly() {
        System.out.println("子类重写父类方法");
    }
}

注意:

  1. @Override表示指定重写父类的方法(从编译层面验证),如果父类没有该方法(这里是fly方法),则会报错。
  2. 如果不写@Override注解,而父类任有该方法(public void fly(){}),仍然构成方法重写。
  3. @Override只能修饰方法,不能修饰其他类,包,属性等。
  4. @Override注解源码中@Target(ElementType.METHOD),说明该注解只能修饰方法。
  5. @Target 是修饰注解的注解,称为元注解。
class Father{//父类
    public void fly() {
        System.out.println("父类方法");
    }
}
class Son extends Father{//子类继承父类
    //1.@Override注解放在fly()方法上面,表示子类的fly方法是重写的父类的fly方法。
    //2.实际上即便没有@Override注解,这里还是重写了父类方法
    //3.但是写了@Override注解,编译器会先检查该方法是否真的重写了父类方法,
    //如果是则编译通过,不是则编译错误。
    @Override
    public void fly() {
        System.out.println("子类重写父类方法");
    }
}

@override注解源码:

/*
 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang;

import java.lang.annotation.*;

/**
 * Indicates that a method declaration is intended to override a
 * method declaration in a supertype. If a method is annotated with
 * this annotation type compilers are required to generate an error
 * message unless at least one of the following conditions hold:
 *
 * <ul><li>
 * The method does override or implement a method declared in a
 * supertype.
 * </li><li>
 * The method has a signature that is override-equivalent to that of
 * any public method declared in {@linkplain Object}.
 * </li></ul>
 *
 * @author  Peter von der Ah&eacute;
 * @author  Joshua Bloch
 * @jls 9.6.1.4 @Override
 * @since 1.5
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

@Deprecated注解

  1. @Deprecated:用于表示某个程序元素(类,方法)已过时。
  2. 可以用来修饰方法、类、字段、包、参数等等
  3. @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
  4. @Deprecated可以做到新旧版本的兼容和过度。
//1.@Deprecated修饰某个元素,表示该元素已经过时。
//2.过时不代表不能使用,只是不再推荐使用而已,还是可以使用的。
@Deprecated
class Clid{
    @Deprecated
    public int a=0;
    @Deprecated
    public void fly(){}
    public void say(){}
}

在结构中可以看出,被@Deprecated注解的元素会被一条横线贯穿。

 @SuppressWarnings注解

@SuppressWarnings:抑制编译器警告。

注:这些黄色的就是警告⚠。加上注解后就会抑制警告。

 

  1. 当我们不希望看到这些警告的时候,可以使用 SuppressWarnings 注解来抑制警告信息
  2.  {""} 中,可以写入你希望抑制(不显示)警告信息
  3. SuppressWarnings 作用范围是和你放置的位置相关,通常我们可以放置具体的语句。
  4. 可以指定的警告类型有
警告类型作用
all
抑制所有警告
boxing
抑制与封装 / 拆装作业相关的警告
cast
抑制与强制转型作业相关的警告
dep-ann
抑制与淘汰注释相关的警告
deprecation
抑制与淘汰的相关警告
fallthrough
抑制与 switch 陈述式中遗漏 break 相关的警告
finally
抑制与未传回 finally 区块相关的警告
hiding
抑制与隐藏变数的区域变数相关的警告
incomplete-switch
抑制与 switch 陈述式 (enum case) 中遗漏项目相关的警告
javadoc
抑制与 javadoc 相关的警告
nls
抑制与非 nls 字串文字相关的警告
null
抑制与空值分析相关的警告
rawtypes
抑制与使用 raw 类型相关的警告
resource
抑制与使用 Closeable 类型的资源相关的警告
restriction
抑制与使用不建议或禁止参照相关的警告
serial
抑制与可序列化的类别遗漏 serialVersionUID 栏位相关的警告
static-access
抑制与静态存取不正确相关的警告
static-method
抑制与可能宣告为 static 的方法相关的警告
super
抑制与置换方法相关但不含 super 呼叫的警告
synthetic-access
抑制与内部类别的存取未最佳化相关的警告
sync-override
抑制因为置换同步方法而遗漏同步化的警告
unchecked
抑制与未检查的作业相关的警告
unqualified-field-access
抑制与栏位存取不合格相关的警告
unused
抑制与未用的程式码及停用的程式码相关的警告

元注解

JDK的元注解用于修饰其他的注解

元注解:本身作用不大

  1. Retention :指定注解的作用范围,三种SOURCE、CLASS、RUNTIME。
  2. Target:指定注解可以在那些地方使用。
  3. Documented:指定该注解是否会在javadoc体现。
  4. Inherited:子类会继承父类注解。

@Retention 注解

说明:

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

@Target注解

用于修饰注解定义,用于指定被修饰的注解能用于修饰哪些程序元素。@Target也包含了一个名为value的成员变量。

@Documented注解

@Documented:用于指定该注解修饰的注解类将被javadoc工具提取成文档,即在生成文档时可以看到该注解。

说明:定义在@Documented的注解必须设置@Retention值为RUNTIME。

@Inherited注解

被它修饰的注解将具有继承性。如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wen先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值