一、获得各个字节码对应的实例对象(Class类型)的三种方式,示例以下:java
类名.class,好比,System.classthis
对象.getClass(),好比,new Date().getClass()spa
Class.forName("类名"),好比,Class.forName("java.util.Date")code
二、Constructor类的使用,Constructor类表明某个类中的一个构造方法对象
获得某个类全部的构造方法:blog
Constructor[] constructors=Class.forName("java.lang.String").getConstructors();get
获得某一个构造方法:io
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);class
建立实例对象:变量
普通方式:
String str=new String(new StringBuffer("abc"));
使用反射:
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
String str1=(String) constructor.newInstance(new StringBuffer("abc"));
直接使用Class.newInstance()方法:
String str2=(String)Class.forName("java.lang.String").newInstance();
该方法内部是先获得默认的构造方法,而后用该构造方法建立对象实例
三、Field类表明某个类中的一个成员变量,使用方法以下:
class Point{ public int x; private int y; public Point() {} public Point(int x,int y){ this.x=x; this.y=y; } } public class Demo01 { public static void main(String[] args) throws Exception { Point point=new Point(1,2); Field xField=Class.forName("com.ly.java.enhance.reflection.Point").getField("x"); System.out.println(xField.get(point));
//获得私有属性 Field yField=Class.forName("com.ly.java.enhance.reflection.Point").getDeclaredField("y"); yField.setAccessible(true); System.out.println(yField.get(point)); } }
四、Method类表明某个类中的一个成员方法,使用方法以下:
获得类中的某一个方法:
Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);
调用类中的某一个方法:
String str="abc";
普通方式:System.out.println(str.charAt(1));
使用反射:
Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class); System.out.println(charAt.invoke(str, 1));