加了注解,等于打上了某种标记,没加,则等于没有某种标记,以后,其他程序可以用反射来了解你的类上面有无何种标记,看你有什么标记,就去干相应的事。标记可以加在类,方法,字段,包上,方法的参数上。
(1) Java.lang中最基本的Annotation有 @Deprecated, @Override, @SuppressWarnings三种;其中@Deprecated表示过时或者抛弃不用的element,因为有更好的可以替代或者是原element的使用存在一定危险;
@Override声明了一个方法打算重写父类的方法;利用@Override很多时候可以检测手动重写的方法是否正确;
@SuppressWarnings指示在注释元素以及包含在该注释元素中的所有程序元素中取消显示指定的编译器警告。
针对类的注释,可以用反射Class.isAnnotationPresent(Class Extends Annotation> annotationClass)来检测在某个类上是否存在指定的注释类;
针对方法的注释,也可以用反射Class.getMethod. isAnnotationPresent(Class Extends Annotation> annotationClass)来检测指定方法上是否存在指定的注释类;
(2)Java.lang.annotation中的接口有以下:
Documented:某一类型的注释被javadoc或者某种类似的工具进行文档化
Inherited:指示注释类型被自动继承
Retention:指示注释类型将会保留多久;其默认值为RetentionPolicy.CLASS(编译器将把注释记录在类文件中,但在运行时VM不需要保留注释。);它还可以取值为RetentionPolicy.SOURCE(编译器要丢弃的注释。)和RetentionPolicy.RUNTIME(编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。)。其中@Override和@SuppressWarnings是RetentionPolicy.SOURCE级别的;@Deprecated是RetentionPolicy.RUNTIME级别的
Target:指示注释类型适用的程序元素的种类;其ElementType的取值可以是ANNOTATION_TYPE(注释类型声明),CONSTRUCTOR(构造器声明),FIELD(属性声明),TYPE等;例如:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
(3)定义自己的MyAnnotation,为MyAnnotation类增加参数,并为参数添加默认值:
public String color() default "green";
public int[] array() default {1,2};
public String value() default "java";
public MetaAnnotation annotation() default @MetaAnnotation("miracle");//有个注释类名为MetaAnnotation;其参数增加也如上所示;由@MetaAnnotation定义default值的方式可知,在@MetaAnnotation类中需要设置的属性值为Value。
如果注解中有一个名称为value的属性,并且其他属性都采用默认值,且只想设置value属性,那么,在使用时可以省略value=,例如:
@MyAnnotation("javaweb")
参数为注解的情况:@MyAnnotation(value="red",annotation=@MetaAnnotation("samuel"))用反射的方法了解User类上是否有注解,什么注解的方法如下,注意数组Annotation的输出方式:
if (User.class.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation myAnnotation = User.class.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.color());
System.out.println(Arrays.toString(myAnnotation.array()));
System.out.println(myAnnotation.value());
MetaAnnotation ma = myAnnotation.annotation();
System.out.println(ma.value());
}
分享到:
相关推荐
在Java编程环境中,有时我们可能会遇到“java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around”的错误,这通常意味着运行时环境无法找到特定的类,即`org.aspectj.lang.annotation.Around`。...
jackson-annotations-2.10.2.jar jackson-core-2.10.2.jar jackson-databind-2.10.2.jar NoClassDefFoundError解决
JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd ...java.lang.annotation java.lang.instrument java.lang.management java.lang.ref
【描述】"java.lang.ClassNotFoundException: javax.annotation.ParametersAreNonnullByDefault"这个错误提示表明在尝试加载`javax.annotation.ParametersAreNonnullByDefault`类时失败。这个特定的注解是JSR 305的...
* java.lang.reflect 是 Java 2 Platform 的一部分,提供了类和接口,以获得关于类和对象的反射信息。 20、数学运算:java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类...
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
5.java.lang.reflect.AnnotatedElement是重要的接口,它代表了提供查询Annotation能力的程序成员。这个接口被java.lang.Package、java.lang.Class实现,并间接地被Method类、Constructor类、java.lang.reflect的...
Java.applet包支持构建和管理Applet,即可以在Web浏览器中运行的小应用程序。尽管随着HTML5的发展,Applet的使用已不如以往普遍,但该包仍然提供了一种在网页中嵌入动态内容的方式。 #### Java.awt Java.awt...
4. **异常和错误**:Java中的异常处理机制是通过`Exception`和`Error`类来实现的,这些类在`java.lang.Throwable`下。例如,`IOException`是所有I/O异常的基类,`NullPointerException`表示尝试访问空对象引用。 5....
JavaTM 2 Platform Standard Ed. 5.0 ...org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax org.xml.sax.ext org.xml.sax.helpers
Java 类包是 Java 语言的核心组成部分,它们组织了大量的类和接口,使得开发者能够方便地进行各种功能的实现。本文将详细介绍 Java 开发中常见的类包及其作用。 首先,`java.applet` 包用于创建和管理 Applet,这是...
javase 中文API 最新版 ******************************* ...org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax org.xml.sax.ext org.xml.sax.helpers
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
注解(`java.lang.annotation`)是元数据的一种形式,用于向编译器或JVM提供信息,以实现代码的自描述。 7. **国际化与本地化**:`java.text`和`java.util.locale`包支持国际化和本地化,帮助开发者构建能够适应不同...
3. **多线程**:Java 6 API中的`java.lang.Thread`类和`java.util.concurrent`包提供了多线程编程的支持。`Thread`类允许创建和管理独立执行的线程,而`java.util.concurrent`包包含了许多高级并发工具,如线程池、...
- 当定义一个注解时,实际上实现了`java.lang.annotation.Annotation`接口。注解类型的声明不允许有父接口或父类。 4. Retention策略: - `java.lang.annotation.Retention`:用于控制注解的生命周期,决定它在...
注解(Annotation)是`java.lang.annotation`包的一部分,用于在代码中添加元数据,有助于编译器和运行时系统进行代码分析和处理。 7. **XML处理**:`javax.xml`和`org.w3c.dom`等包提供了处理XML文档的API,包括...