Java千百问_03基础语法(019)_注解是什么

点击进入_更多_Java千百问

1、注解是什么

java中的注解(Annotation),也叫元数据。是Java 5以后版本引入的一个特性。

注解与类、接口、枚举是在同一个层次,可以用来标注包、类、字段、方法、局部变量、方法参数等元素,达到对这些元素的描述和说明。

注解是可以允许jvm在运行中读取它,这一点与注释完全不同。并且包含多种加载策略,可以灵活配置。

了解注解、注释区别看这里:注解、注释有什么区别

如何自定义注解看这里:如何使用注解

2、注解有哪些加载策略

注解包含3中可配置的加载策略(RetentionPolicy),根据不同的需要进行不同的配置,具体如下:

public enum RetentionPolicy {
    // 此类型会被编译器丢弃
    SOURCE,
    // 此类型注解会保留在class文件中,但JVM会忽略它,默认策略
    CLASS,
    // 此类型注解会保留在class文件中,JVM会读取它
    RUNTIME
}

3、注解有什么作用

注解主要功能有以下几点:

  1. 编写文档

    通过代码里标识的元数据生成文档,这一点与注释类似。

  2. 代码分析

    通过代码里标识的元数据对代码进行分析,一般使用反射获取注解信息。

  3. 编译检查

    通过代码里标识的元数据让编译器能够实现基本的编译检查,例如方法覆盖@Override。

4、JDK有那些内置注解

jdk提供了若干内置注解,常见的如下:

@Override

它用来对覆盖父类方法、实现接口方法进行标记,如果被标记的方法并没有实际覆盖父类方法,则编译器会发出错误警告。

例子:

public class SuperTest {
    public String tostring() {
        return "父类";
    }
}

public class Test extends SuperTest {
    @Override
    public String tostring() {
        return "子类注解";
    }
}

@Deprecated

它用来标记过期方法、不推荐使用方法。对于某些已经过期、不推荐使用的方法,但又不能直接删除(有其他地方仍使用),我们会使用@Deprecated进行标记,当使用这些方法时,会在编译时进行提示。

例子:

public class Test {
    public static void main(String[]args) {
        // 使用DeprecatedClass里声明被过时的方法
        DeprecatedClass.DeprecatedMethod();
    }
}

class DeprecatedClass {

    @Deprecated
    public static void DeprecatedMethod() {
    }
}

@SuppressWarnings

它用来标记不想被提示的警告,警告类型可以通过参数控制,具体如下:

deprecation,使用了过时的类或方法时的警告

unchecked,执行了未检查的转换时的警告

fallthrough,当Switch程序块直接通往下一种情况而没有Break时的警告

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

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

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

all,关于以上所有情况的警告

例子:

public class Test {

    public static Listlist = newArrayList();

    @SuppressWarnings("unchecked")
    public void add(String data) {
        list.add(data);
    }
}
时间: 2024-08-02 06:55:11

Java千百问_03基础语法(019)_注解是什么的相关文章

Java千百问_03基础语法(020)_注解、注释有什么区别

java注释注解×注释注解区别×注释注解混淆×java注释注解区别×注解与注释不同点× 点击进入_更多_Java千百问 1.注解.注释有什么区别 了解注释看这里:注释是什么 了解注解看这里:注解是什么 注解和注释很多人会混淆,它们之间的应用场景和具体使用完全不同,具体如下: 用途不同 注解通过标注包.类.字段.方法.局部变量.方法参数等元素,告诉JVM这些元素的附加信息(元信息). 注释是用来告诉开发人员这段代码的逻辑.说明.特点等,可以无限制的自由发挥. 具体使用不同 注解通过@来标注响应的元

Java千百问_03基础语法(021)_如何自定义注解

点击进入_更多_Java千百问color="#ff0000" 1.如何自定义注解 要学习使用注解,我们需要了解注解,并且了解java提供的常见注解.更重要的是学会自定义注解. 了解注释看这里:注释是什么 我们自定义注解需要使用@interface关键字,具体语法如下: public @interface 注解名 {定义体} default {默认值} 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其

Java千百问_03基础语法(018)_注释是什么

点击进入_更多_Java千百问 1.注释是什么 java中的注释和其他编程语言中的注释一样,注释的内容不会被编译运行,只是源代码中对代码的解释说明. 通过添加代码注释可以提高源代码的可读性,使得Java程序条理清晰,易于区分代码行与注释行.另外,通常还会在类.方法或者代码段开头加入作者.添加/修改时间.程序版本以及代码功能等内容注释,方便后来的维护以及程序员的交流.(当然,对于好的代码,不写注释也能够有很高的可读性) 2.注释如何使用 对于Java注释,我们可以添加在代码中任何地方,主要语法有如

Java千百问_03基础语法(022)_元注解是什么

点击进入_更多_Java千百问 1.元注解是什么 了解注释看这里:注释是什么 了解自定义注解看这里:如何自定义注解 元注解就是负责注解其他注解.Java 5定义了4个标准的元注解(meta-annotation):@Target.@Retention.@Documented.@Inherited,这些元注解的类在java.lang.annotation包中,具体如下: @Target @Target说明了注解所修饰的对象范围,即所定义的注解可以用在什么地方.具体的取值有: CONSTRUCTOR

Java千百问_03基础语法(017)_static有什么用

点击进入_更多_Java千百问 1.static有什么用 static是java的关键字,用static声明达到静态的目的.所谓静态,就是在程序编译后就能被使用,不需要创建任何实例.static能够修饰类.方法.变量以及类代码块,具体如下: static方法 被static声明的方法叫做静态方法,不需要实例化对象通过类名直接调用的方法,最常见的是main(). 了解main方法看这里:main方法是什么 例如: public class TestStatic { public static vo

Java千百问_03基础语法(016)_main方法是什么

点击进入_更多_Java千百问 1.main方法是什么 某个类中有main()方法,说明这是一个java应用程序,可以直接启动运行的程序(操作系统中安装了jdk或者jre).任何一个非抽象类/接口都可以添加main()方法. 了解抽象类.接口看这里:接口和抽象类有什么区别 在java的规范中,main()方法的声明为: public static void main(String args[]){ } 当通过java运行工具运行某个类时:java 类名,jre会运行类中的main()方法.在运行

Java千百问_03基础语法(013)_>、>>、>>>有什么区别

点击进入_更多_Java千百问 1.>.>>.>>>有什么区别 了解java运算符看这里:java种的运算符都有哪些 了解java运算符优先级看这里:java运算符的优先级是怎样的 ">"属于关系运算符,而">>".">>>"则按位运算符,看一下它们各自的含义: 运算符> 关系运算符,表示大于. 如:if(a>b)-结果是boolean类型. 运算符>>

Java千百问_03基础语法(015)_System.exit(0)有什么用

点击进入_更多_Java千百问 1.System.exit(0)有什么用 查看java.lang.System的源代码,我们可以找到System.exit(status)这个方法,源代码如下: public final class System { /** * Terminates the currently running Java Virtual Machine. The * argument serves as a status code; by convention, a nonzero

Java千百问_03基础语法(012)_transient关键字有什么用

点击进入_更多_Java千百问 1.transient关键字有什么用 transient是java语言的关键字,是变量修饰符. 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持. Java的serialization(序列化)提供了一种持久化对象实例的机制,当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它.为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient. 了解序列化看这里