Java中的注解主要用于标识在类,方法,属性,自动上,有很多用途,比如我们常见的@Override,自定义注解都继承java.lang.annotation.Annotation接口,使用@interface声明。注解中的参数有基本类型int,float,boolean,byte,double,char,long,short,Class类型,String类型,枚举类型,Annotation类型,以及以上所有类型的数组。下面我们创建一个注解类型
package jdbcDemo;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE,ElementType.FIELD})
@Documented
public @interface FiledOrder {
//顺序,默认值为0
public int seq() default 0;
//备注
String remark();
}
</pre><pre class="java" name="code" snippet_file_name="blog_20160704_3_4371796" code_snippet_id="1743909">package jdbcDemo;
public class Person {
@FiledOrder(seq=2,remark="名称")
private String name;
@FiledOrder(seq=1,remark="顺序")
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package jdbcDemo;
import java.lang.reflect.Field;
public class firstAnnotationDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Class c=Person.class;//获取类实例
System.out.println("获取类实例");
Field[] fs=c.getDeclaredFields(); //获取所有字段
System.out.println(fs.length);
for(Field f:fs)
{
System.out.println(f.getName());
//判断是否有注解
if(f.isAnnotationPresent(FiledOrder.class))
{
FiledOrder fo=f.getAnnotation(FiledOrder.class);
System.out.println("顺序"+fo.seq()+"--备注"+fo.remark());
}
}
}
}
自定义注解中如果只有一个字段,要定义名称为value(); 字段的权限修饰要用public或默认值