1、获取字节码文件对象的三种方式:1、对象.getClass() 2、类名.class 3、Class clazz=Class.forName("带包名的类名")。三者区别:1、出现的时期不同:Class.forName()在运行时加载;Class.class和getClass()是在编译器加载;2、Class.class只是在编译时用来存放类的相关信息,并没有实例化对象;而getClass()既实例化了对象,又存放了类信息。
2、通过getFields()和getMethods()方法获得权限为public的成员变量和方法时,将包含从超类中继承到的成员变量和方法;而getDeclaredFields()和getDeclaredMethods()方法只是获得在本类中定义的所有成员变量和方法。
3、getDeclaredConstructors()方法获得的构造方法按声明顺序的相反顺序返回。
4、Constructor类的newInstance(Object...para)方法可以利用指定参数创建一个该类对象,如果未设置参数则用无参构造方法创建一个对象,该方法的返回值类型为Object。
5、Constructor类、Method类、Field类的setAccessible()方法可以设置是否能访问被private修饰的对象,getModifiers()方法可以获得能解析出该构造方法所采用修饰符的参数。
6、java.lang.reflect.Modifier类可以解析出getModifiers()方法返回值所表示的修饰符信息,在该类中提供了一系列用来解析的静态方法,既可以查看是否被指定的修饰符修饰,还可以以字符串的形式获得所有修饰符。