栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java注解----常用标准注解和元注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java注解----常用标准注解和元注解

目录

注解是什么

注解的种类

标准注解

元注解


注解是什么

注解又叫元数据,像写给程序看的一种标签一样的提示,用于对代码进行说明和对使用了注解的程序提供判断依据;

补充:

1:注解也称为元数据,用于修饰解释包,类,方法,属性,构造方法,局部变量等数据信息。

2:和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入代码中的补充信息;

3:在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等,在JavaEE中占据了更重要的角色。例如用来配置应用程序的任何切面等;

使用方法:@ + 注解,放在想要修饰的程序元素前面;

注解的种类

1:标准注解,此注解是Java自带的注解,有它们特定的注解用处,如@Override,@Deprecated,@SuppressWarnings等;

2:元注解:用来修饰注解的注解,如@Target,@Documented等;

3:自定义注解:程序员自己按照需求定义的注解。

标准注解

定义:标准注解是Java已经规定好并直接提供给程序员使用的注解,有它们特定的用处。下面介绍常用的注解。

*  @Override注解

作用:该注解用于标记子类的方法为父类方法的重写方法,如下:

class Person{
    public void run(){
        System.out.println("这个人在奔跑。。。");
    }
}
class Student extends Person{
    @Override  //使用@Override注解标记重写的方法
    public void run() {
        System.out.println("这个学生在奔跑。。。");
    }
}

说明:1:该方法写在子类重写的方法之前,表明该子类方法重写了父类的方法;

           2:该注解只能修饰方法。

补充:如果这里没有写该注解,子类仍然重写了父类的方法;

区别在于:如果写了该注解,编译器就会在该类的父类中检查是否有和此方法重名的方法,如果有,代表子类的确重写了父类的方法,编译就会通过。反之编译就会报错。

*  @Deprecated注解

作用:该注解用来表示某个程序元素已过时,如下:

public class Annotation {
    public static void main(String[] args) {
        //使用@Deprecated标记的类时,
        //该类会用线划掉来表示该类已过时。
        Student student = new Student(); 
    }
}
class Person{
    public void run(){
        System.out.println("这个人在奔跑。。。");
    }
}
@Deprecated  //使用@Deprecated注解标记Student类
class Student extends Person{
    @Override  //使用@Override注解标记重写的方法
    public void run() {
        System.out.println("这个学生在奔跑。。。");
    }
}

说明:1:该注解写在程序元素的前面,代表该注解已过时;

           2:该注解可以修饰很多的程序元素,包括类,方法,字段等。

补充:已过时的方法还可以使用,只是不推荐使用,它的作用主要是进行版本的兼容和过渡;比如在实际的开发中,老版本往往含有很多冗余过时的功能和代码,但新版本完全删除这些代码可能会影响性能,此时就可以添加@Deprecated注解来进行过渡。

*  @SuppressWarnings注解

作用:该注解可以抑制可能出现的警告(使该警告不在出现)。如下:

@SuppressWarnings({"all"})  //抑制所有警告
public class Annotation {
    public static void main(String[] args) {
        //警告1:student变量从未使用
        Student student = new Student();
    }
}
@SuppressWarnings({"all"})  //抑制所有警告
class Person{
    //警告2:run方法从未使用
    public void run(){
        System.out.println("这个人在奔跑。。。");
    }
}
class Student extends Person{
    public void run() {
        System.out.println("这个学生在奔跑。。。");
    }
}

说明:1:使用 "all" 标识可以抑制所有警告;

           2:可以修饰类,方法等程序元素;

           3:该注解有作用域,放在类或方法前面,就只能抑制类或方法当中的警告;

补充:格式:@SuppressWarnings({" n "})

                      n为想要抑制的警告类型,n有如下选项:

关键字抑制警告类型
all抑制所有警告
boxing抑制与封装,拆装等包装类警告
cast抑制与强制类型转换相关的警告
dep-ann抑制与淘汰注释相关的警告
dprecation抑制与淘汰的相关警告
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抑制与静态方法相关的警告
super抑制与置换方法相关但不含super呼叫的警告
synthetic-access抑制与内部类别的存取未最佳化相关的警告
sync-override抑制因为置换同步方法而遗漏同步化相关的警告
unchecked 抑制与未检查的作业相关的警告
unqualified-field-access抑制与栏位存取不合格相关的警告
unused抑制与未用的程式码即停用的程式码相关的警告

元注解

定义:修饰注解的注解;

*  Retention注解

作用:只能用于修饰一个注解的定义,用于指定该注解可以保留多长时间,该注解包含一个RetentionPolicy类型的成员变量,使用该注解时必须为该value变量指定值;如下:

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.SOURCE)  //指定该注解只能在编译时使用
public @interface SuppressWarnings {
    String[] value();
}

说明:1:以上是@SuppressWarnings注解的源代码;

           2:@Retention注解中RetentionPolicy的值SOURCE指定了@SuppressWarnings的作用范             围只在编译器编译时,使用后直接丢弃。

补充:该注解的三种值:

1:RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释;

2:RetentionPolicy.CLASS:编译器把注解记录在class文件中,当运行Java程序时,JVM不会保留注解,这是默认值;

3:RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行Java程序时,JVM会保留该注解,程序可以获取该注解;

还有补充(想不到吧):Java文件编译运行的过程:

1:Java文件先通过编译器(Javac)编译为class文件。如果在该元注解里写上SOURCE,则此注解只在这一阶段保留;

2:class文件被加载到JVM中进行加载;如果在该元注解里写上CLASS,此注解可以保留到这个阶段;

3:JVM运行程序;如果在该元注解里写上RUNTIME,此注解可以一直被保留到运行时。

*  @Target注解

作用:用于修饰注解的定义,用于指定被修饰的注解能用于修饰那些程序元素。@Target也包含一个名为Value的成员变量;如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)  //该元注解指定了此注解只能修饰方法
public @interface Override {
}

说明:1:以上为@Override的源码;

           2:@Target指定了该注解只能修饰方法。

@Documented
@Retention(RetentionPolicy.RUNTIME)
//该元注解指定了此注解可修饰的范围
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
public @interface Deprecated {
    String since() default "";
    boolean forRemoval() default false;
}

说明:1:以上是@Deprecated的源码;

           2:该元注解指定了该注解可以修饰类,方法,字段等程序元素。

补充:使用格式@Target(value={n})

                                n为可以指定的修饰范围,n有如下选项

n的值指定的范围
CONSTRUCTOR构造方法
FIELD字段
LOCAL_VARIABLE局部变量
METHOD方法
PACKAGE软件包
PARAMETER构造方法变量
TYPE

n可以写多个变量,不同的变量之间用" , "隔开。

*  @Documented注解

作用:该注解用于指定被该元注解修饰的注解类将被Javadoc提取成文档,即在生成文档时,可以看到该注解。如上面@Deprecated注解的源码;

补充:定义为Dcumented的@Retention注解必须设置成RUNTIME(运行时)。(如上)

*  @Inherited注解

作用:被该注解修饰的注解将具有继承性。如果某个类使用了被该注解修饰的注解,那么它的子类会自动具有该注解。

补充:该注解只能用于对类的注解,该注解不能用于实现接口的类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号