注解
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。
annotation的作用:
-
不是程序本身,可以对程序作出解释,(这一点跟注解(comment)没有什么区别)
-
可以被其他程序(比如:编译器等)读取
-
annotation并不直接影响代码语义,但是它能够工作的方式被看作类似程序的工具或者类库,它会反过来对正在运行的程序语义有所影响。
-
annotation可以从源文件、class文件或者以在运行时反射的多种方式被读取。
什么是注解?
JDK5 内建Annotation
注解的语法比较简单,除了**@**符号的使用之外,它基本与Java固有的语法一致。Java内置了三种注解,定义在java.lang
中的注解:
@Override 重写的注解
@Deprecated 不推荐程序员使用,但是可以使用,或者存在更好的方式
@SuppressWarnings(“all”) 抑制全部(all)编译程序警告
JDK5 元注解Annotation
元注解的作用就是负责注解其他注解,java定义了4个标准的meat_anntation类型
它们被用来提供对其他anntation类型作说明
这些类都在java.lang.annnotation包下
package com.Jintwo.www;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class TextConnation {
@MyAnnotation
public void text() {
}
}
//定义一个注解
//target 表示我们的注解可以用在那些地方
@Target(value=ElementType.METHOD)
//Retention 表示我们的注解在什么地方有效
//runtime >class>sources
@Retention(value=RetentionPolicy.RUNTIME)
//Documented 表示是否将我们的注解生成在Javadoc
@Documented
//Inherited 子类可以继承父类的注解
@Inherited
//interface 自定义注解,自动继承java.lang.aonnnation
@interface MyAnnotation{
}
package com.Jintwo.www;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@MyAnnotation(age=18,ages= {1,2,3}) //没有顺序
public class TextAnnotation {
//注解可以显示赋值,如果没有默认值,我必须给注解赋值
@MyAnnotation1("流")
public void text() {
}
}
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
//注解的参数:参数类型+参数名();
String name() default"";
int age();
int []ages();
}
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation1{
String value(); //如果只有value,就不用value=?
}