Java反射

反射就是把java类中的各种成分映射程一个个的java对象。
Class对象是由虚拟机将.class文件读入内存后自动创建的,一个类仅会产生一个Class对象

获取Class对象的三种方式:

1、Object.getClass();
2、任何类型(包括基本数据类型)都有一个静态的class属性
3、通过Class类的静态方法:forName(String className)(常用)

通过反射获取构造方法并调用创建对象

1、获取构造方法
Class类
public Constructor[] getConstructors();获取所有“公有的”构造方法;
public Constructor[] getDeclaredConstructors();获取所有的构造方法;
public Constructor getConstructor(Class...parameterTypes);获取单个“公有的”构造函数;
public Constructor getDeclaredConstructor(Class...parameterTypes);获取某个“公有、私有、默认、保护的”构造函数;
2、调用构造方法创建对象
Constructor类的newInstance(Object>>>initargs)方法,initargs为构造函数所需要的参数;

获取成员变量并调用

1、获取成员变量
Class类的
public Field[] getFields();
public Field[] getDeclaredFields();
public Field getField(String fieldName);
public Field getDeclaredField(String fieldName);
2、设置成员变量的值
Field类的set(Object obj, Object value)方法,obj为设置字段所属的对象,value为字段要设置的值;

获取成员方法并调用

1、获取成员方法
Class类的
public Method[] getMethods();
public Method[] getDeclaredMethods();
public Method getMethod();
public Method getDeclaredMethod();
2、调用成员方法
Method类的invoke(Object obj, Object...args)方法,obj为调用方法所属的对象,args为调用方法所需要的参数;

反射main方法

1、获取main方法
Class类的
public Method getMethod("main", String[].class);
2、调用main方法
Method类的invoke(null, (Object) new String[]{"a","b","c"})方法;

反射机制的应用:通过反射运行配置文件的内容、通过反射越过泛型检查(因为泛型用在编译期,编译后泛型擦除)、设计模式(工厂模式和单例模式)、框架技术;

你可能感兴趣的:(Java反射)