day10-注解跟反射(Annotation)
什么是注解
注解与注释是有区别的
常用注解
@Override:重写的注解
@Functionalnterface:函数接口注解
@Deprecated:已废弃注解
@SuppressWarnings(valu=“unchecked”):易执行的
@SuppressWarnings(“all”):镇压警告,系统警告消失
@Target({TYPE,FIELD,METHOD,PARMETER,CONSTRUCTOR,LOCAL_VARIABLE}):目标类型,使用范围
内置注解
元注解
//元注解测试
@MyAnnotation
public class TestAnnotation {
@MyAnnotation
public static void main(String[] args) {
}
}
// 定义一个注解
//@Target:规定注解可以使用的类型范围
//TYPE:类,METHOD:方法,Annotation_TYPE:注解类型
//Construct:构造器,FIELD:字段,PARAMETER:参数,LOCAL_VARIABLE:本地变量,PACKAGE:包类型
@Target({ElementType.TYPE,ElementType.METHOD})
//表示我们的注解在什么时候还有效 RunTIME>class>sources
@Retention(value = RetentionPolicy.RUNTIME)
//表示是否将我们的注解声明在JAVAc文件中
@Documented
//说明子类可以继承父类的该注解
@Inherited
@interface MyAnnotation{
}
如何自定义注解
ElementTYPE:对象类型
public class TestAnnotation {
//有默认值的参数可以不写使用默认值,没有默认值的参数必须赋值
@MyAnnotation2(name="史佳豪",money = 1000,has = {12,13})
@MyAnnotation3(5)
public static void main(String[] args) {
}
}
//注解中定义参数
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface MyAnnotation2{
// 参数定义:参数类型 + 参数名 +()选+ default+默认值 +;
String name();
String sex() default "MAN";
int age()default 18;
int money();
int[] has();//定义一个int类型的数组参数
}
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
//当只有一个参数时参数名应使用value,这样在注解添加参数时可以不写参数名,直接赋值
@interface MyAnnotation3{
int value ();
}