一、基础知识

1、注解是jdk1.5版本提供的一个特征:@Deprecated:标识使用方法已经被放弃,但是还可以使用 @SuppressWarnings("all") //@SunppressWarnings("uncheck") 取消警告操作

2、元注解:不能包含其他注解的注解(元数据) @Documented 生成 JavaDoc文档的时候会生成在文件中 @Retetion 代表该注解的作用域:SOURCE:代表源码中有效 CLASS:字节码文件中有效。RUNTIME:JVM上面运行时都有效 @Target:指定注解能够出现的位置 TYPE:标注在类上面 METHOD:标注在方法上面 PARAMETER:标在参数上面 FIELD:标注在字段上面 @Interned:注解可以继承。

二、代码

1、新建一个注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 注解@Inteface标识
* 指定作用域和位置
*/
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE})
public @interface MyAnnotation {
}

2、写一个类来用上面的注解@MyAnnotation,这时拿的值为空,因为SOURCE在源码中有效,在运行时没有效

java 对象不是表格字段注解_java


3、作用域标为Class类型的时候还是null

java 对象不是表格字段注解_java 对象不是表格字段注解_02


运行下Myclass的类:因为SOURCE的作用域在字节码文件上

java 对象不是表格字段注解_java 对象不是表格字段注解_03


因为类运行的时候是加载到java虚拟机上的,所以一般自定义的注解都是Runtime,因为在运行期间拿它的注解的对象

java 对象不是表格字段注解_作用域_04


运行结果

java 对象不是表格字段注解_一维数组_05


注解里面可以定义方法的比如:定义一个value方法的声明,这个方法的声明在MyAnnotation里面称之为属性也是没问题的,好比接口一样

java 对象不是表格字段注解_作用域_06


但是一般定义一个空的字符串就可以了

java 对象不是表格字段注解_java_07


如果是在注解里面就一个Value属性的话,在Myclass类里面上MyAnnotation注解上的属性Value不用写

java 对象不是表格字段注解_java 对象不是表格字段注解_08


如何拿这个类上面的注解所对应方法的值呢?代码如下:如果不强转的话,用泛型也是Ok的。

java 对象不是表格字段注解_java 对象不是表格字段注解_09


上面的注解就是标在类上,注解也可以标注在字段上

java 对象不是表格字段注解_java_10

java 对象不是表格字段注解_java 对象不是表格字段注解_11


然后运行下MyClass类

java 对象不是表格字段注解_一维数组_12

注解也可以标注在方法上和参数上代码如下

java 对象不是表格字段注解_一维数组_13

获取参数值的代码如下:二维数组里面的每一个下表存的是一维数组,一维数组里面存的是注解的对对象

java 对象不是表格字段注解_java 对象不是表格字段注解_14

java 对象不是表格字段注解_一维数组_15