1.先创建一个包
2.右键 -->New -->Annotation 写入名称
3.自定义注解,元注解 :
1)使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
2)要点:
a)@interface用来声明一个注解
格式为: public @interface 注解名{定义体}
b)其中的每一个方法实际上是声明了一个配置参数
-方法的名称就是参数的名称
-返回值类型就是参数的类型(返回值类型只能是基本类型,class,String,enum)
-可以通过default来声明参数的默认值
-如果只有一个参数成员,一般参数名为value
3)元注解:
a)元注解的作用就是负责注解其他注解,java定义了4个标准的meta-annotation类型
它们被用来提供对其他annotation类型作说明
b)这些类型和它们所支持的类在java.lang.annotation包中可以找到
-@Target 学这个
-@Retention 学这个
-@Documented 用的不多
-@Inherited 用的不多
//-----------程序练习--------------------------
package java_209_自定义注解_练习;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
- Target目标;ElementType元素类型;METHOD方法;TYPE类型
- Retention保留;RetentionPolicy保存策略;RUNTIME运行时
*/
@Target(value={ElementType.METHOD,ElementType.TYPE})//这个即可以修饰类也可以修饰方法 ;这是个数组
@Retention(RetentionPolicy.RUNTIME)//
public @interface SxtAnnotation01 {//interface接口; SxtAnnotation设置状态
//studentName学生姓名;default默认值
String studentName() default “”;//如果不加 default ""系统默认值 ;后面Demo02就会报错
int age() default 0;
int id() default -1;//如果默认值为-1的话;表示这个值本身不存在
//数组;schools学派
String[] schools() default{"北京大学,东北大学"};//可以设置,默认学校
}
//-------------------------------------------------------
package java_209_自定义注解_练习;
@SxtAnnotation01//但如果SxtAnnotation01类前面加了@Target(value={ElementType.METHOD,ElementType.TYPE})就不会报错
public class Demo02 {
//@SxtAnnotation01//这个只能放在方法前面;如果放到类前面就会报错
@SxtAnnotation01(age=19,studentName="张三",id=1001,
schools={"北京大学","南京大学"})//也可以在这里显示定义值
public void test(){
}
//因为SxtAnnotation02没有赋值;所以在这里赋值也可以
@SxtAnnotation02(value="李四")//就一个值也可以在()直接写李四不用写value=
public void test2(){
}
}
//---------------------------------------------
package java_209_自定义注解_练习;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value={ElementType.METHOD,ElementType.TYPE})//这个即可以修饰类也可以修饰方法 ;这是个数组
@Retention(RetentionPolicy.RUNTIME)//
public @interface SxtAnnotation02 {
//如果参数只有一个;常用value
String value();
}