Java注解

1.什么是注解?

简单来说注解是一个特殊的标记符,用于修饰java代码,能被编译器解析,也能在运行时被解析出来。

2.什么是元注解?

元注解就是描述注解的注解。Java提供的元注解有4种

@Target

@Retention

@Documented

@Inherited

 

@Target 用于描述注解的使用范围(被描述的注解可以用在什么地方)

1.CONSTRUCTOR:用于描述构造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述参数

7.TYPE:用于描述类,结构 或 enum声明

@Target(ElementType.TYPE)

public @interface Person{}

Person注解可用于注解类,接口,或enum

 

@Retention 用于定义该注解被保留的时间长短

1.SOURCE:注解信息只有在源文件中有效,在编译后注解信息会被删除点。

2.CLASS:注解信息会在源文件和class文件中保留,不会在虚拟机里。

3.RUNTIME:注解信息会在运行时加载到jvm虚拟机中。在这种情况下,通过反射会得到注解信息。

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface Person{}

 

@Documented 用于描述其他类型的annotation时,都会被Javadoc工具文档化,Documented是一个标记注解,没有成员。

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Person{}

 

@Inherited 用于描述某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的注解类型被用于一个class,则这个注解将被用于该class的子类。

@Inherited

public @interface Animal { }

 

3.自定义注解

1.使用 @interface关键字自定义注解。

2.所有的方法都没有方法体,只允许piblic 和abstract两种类型。默认是public。

3.注解方法的返回值类型有:基本数据类型,String,Class,enum,注解,上面类型的一维数组。

4.通过default关键字来生命默认值。

 

自定义注解例子:

创建PersonName注解:

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface PersonName {

String  name()  default  "";

}


创建PersonSex注解:

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface PersonSex {

int sex() default 1;

}


使用注解:设置名字为 name为小花,  sex为2

public class Person {

@PersonName(name ="小花")

private Stringname;

@PersonSex(sex =2)

private int  sex;

 public StringgetName() {

          return name;

   }

public int getSex() {

         return sex;

   }

}



解析注解:

Class clazz = Person.class;

Field[] fields = clazz.getDeclaredFields();

for (Field f : fields) {

if (f.isAnnotationPresent(PersonName.class)) {

PersonName name = f.getAnnotation(PersonName.class);

        System.out.println(name.name());

    }else if(f.isAnnotationPresent(PersonSex.class)){

PersonSex sex = f.getAnnotation(PersonSex.class);

        System.out.println(sex.sex());

    }

}




 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值