Java反射机制
动态获取信息以及动态调用对象方法
使用反射需要获取字节码文件对象
如何获取字节码对象:
1. Class.forName("全限定类名")//静态方法,直接获取字节码文件对象,源文件阶段还不是字节码文件
2.Person.class //该类加载成class文件时,person类就成为.class,之后获取自己(字节码文件对象)
3.c.getClass(); //通过类的实例获取类的字节码对象,处于创建对象阶段
例:
// 参数根据有参构造为准
Class class="class".forName("Person");
Constructor con=cass.getConstructor(int.class,String.class);//通过构造器实例化对象,传入参数
Person person=(Person)con.nuw Instance(1,"1");
//Annotation 注解库
@Deprecated : 过时的。
@Override: 重写、覆盖
@SuppressWarnings:压缩警告
--
注解相当一种标记,在程序中加入注解等于为程序打上某一种标记,可添加再包、类、属性、方法、参数、局部变量上。
元注解
@Target :用于描述注解的使用范围
@Retention :表示需要在什么级别保存该注解信息,描述注解声明周期(什么时候还可以用)
@Document: 注解加入Javadoc中
@Inherited:子类可以继承父类的该注解
------
自定义注解:
@interface 自动继承Annotation接口
格式: public @interface 注解名{定义内容}
每一个方法声明了一个配置参数
方法名称即参数名称
返回值类型就是参数的类型(返回值职能是基本类型,Class,String,enum)
可以通过default声明参数的默认值
只有一个参数成员,一般参数名为value
注解元素必须有值,自定义注解常使用空字符串,0作为默认值
such as:
public class test(){
@MyAnnotation(根据注解参数为准)
public void test(){
}
}
定义类 定义方法
@Target({ElementType.Type,ElementType.METHOD})//作用域
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
//注解的参数:参数类型+参数名();
String name();
String name() default ""; 定义默认值 注解可以显示赋值。
int age();
int id() default -1 ; //如果默认值为-1代表不存在。
Stirng[]schools();
}
原文:https://www.cnblogs.com/zsxoh/p/14878795.html