注解和反射
1·注解Annotation
-
注解的作用:(1):不是程序本身,可以对程序做出解释类似于注释 (2):可以被其他程序(比如:编译器)读取 -
注解可以添加在package,class,method,filed等上,添加额外的辅助信息,通过反射机制编程实现对这些元数据的访问 -
注解的格式为 @注释名 也可以添加一些参数
1.1内置注解有以下四类
-
? @Override//确保是对对父类方法进行重写,避免低级错误 -
@Deprecated//表示方法程序类已经过时或废弃,不建议程序员使用 -
@SuppressWarnings(value =“参数”)用于该元素的或其子类的抑制编译警告使用时需要添加一个参数才能正确使用可以使用以下参数all,unchecked,deprecation、{“unchecked”,“deprecation”}等 -
@SafeVarargs//堆污染警告 1.1代码
public class text01 {
//1注解Annotation
//注解的作用:(1):不是程序本身,可以对程序做出解释类似于注释
// (2):可以被其他程序(比如:编译器)读取
//注解可以添加在package,class,method,filed等上,添加额外的辅助信息,通过反射机制编程实现对这些元数据的访问
//注解的格式为 @注释名 也可以添加一些参数
//1.1内置注解有以下四类
//1.1.1
@Override//确保是对对父类方法进行重写,避免低级错误
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
//1.1.2
@Deprecated//表示方法程序类已经过时或废弃,不建议程序员使用
public static void add(){
System.out.print("该方法不建议使用,但仍可使用");
}
//1.1.3
@SuppressWarnings(value ="dwd")//用于该元素的或其子类的抑制编译警告使用时需要添加一个参数才能正确使用
//可以使用以下参数all,unchecked,deprecation,{"unchecked","deprecation"}等
//1.1.4
@SafeVarargs//堆污染警告
static void de(){
List li=new ArrayList();
li.add(20);
List lis=li;
}
}
1.2自定义注解
? 可以使用@interface来定义注解 ,会自动继承Java.lang.annotation.Annotation接口
? @interface 注解名{
? 注解的参数:参数类型 + 参数名();!!这不是一个方法,可以使用 default来设置默认值
? }
定义一个元注解需要以下参数:
? 1.Target表示我们的注解可以用在什么地方 ? @Target(value = {ElementType.METHOD,ElementType.TYPE}) ? 2.级别:runtime>class>sources ? 表示在什么级别保留该注释信息,用于描述注释的生命周期 ? @Retention(value= RetentionPolicy.RUNTIME) ? 3.Documented表示是否将我们的注解生成在javadoc(文档)中 @Documented ? 4.Inherited 子类可以继承父类的注解 @Inherited
1.2代码
//1.2自定义注解
//可以使用@interface来定义注解 ,会自动继承Java.lang.annotation.Annotation接口
public class text02 {
//注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
@MyAnnotation(school = "河北东发学院")
public static void main(String[] args) {
System.out.printf("");
}
}
//定义一个元注解
//
//Target表示我们的注解可以用在什么地方
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//runtime>class>sources
//表示在什么级别保留该注释信息,用于描述注释的生命周期
@Retention(value= RetentionPolicy.RUNTIME)
//Documented表示是否将我们的注解生成在javadoc(文档)中
@Documented
//Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation{
//其中的每一个方法实际上是声明了一个配置参数,方法名称就是参数名
//注解的参数:参数类型 + 参数名();!!这不是一个方法,可以使用 default来设置默认值
String NAME() default "孙伟军";//返回值类型就是参数类型(返回值只能是基本类型,Class,String,enum)
int age() default 0;
int id() default -1;//如果默认值为-1,则代表不存在
String[] school() default {"清华大学","北京大学"};
//如果只有一个参数成员,建议命名为value
}
|