反射:
1,Person p1=new Pweson();
Class cls1=Data.class//Data.class是这个类的字节码,这个字节码的对象的名字是cls1,这个对象的类型是Class.
p1.getClass();//这是早获得这个类的字节码。
2,Class.forName("java.lang.String");//Class.forName的作用就是返回类的字节码,返回的方式有两种(一是这个类的字节码已经存在于内存中,直接返回;另一种是用类加载器去加载,把加载进来的字节码缓存在虚拟机中,然后返回。)
3,如何得到各个字节码对应的实例对象(Class类型)
类名.class,如:System.class
对象.getClass(),例如:new Data().getClass();
Class.forName("类名"),例如:Class.forName("java.util.Date")
4,八种基本类型:
boolean byte char short int long float double
5,数组类型的Class实例对象
Class.isArray()
总之,
注意:只要是在源程序中出现的类型,都有各自的Class实例对象,例如:int[] void
6,什么是反射:反射就是把java类中的各种成分映射成相应的java类。
7,具体展开讲解:一个class代表一份字节码,,一个method代表这份字节码中的一个方法,,一个constructor代表这份字节码中的一个构造方法。
8,Constructor类代表某个类中的一个构造方法。
1.得到某个类中的所有构造方法:
例子:Constructor constructors[]=Class.forName("java.lang.String").getConstructors();
2.得到某一个构造方法:
例子:Constructor constructor=Class.forName("java.lang.String").getConstructor (StringBuffer.class)
//获得方法时要用到类型
3.创建实例对象:
通常方式:String str=new String(new StringBuffer("abc"));
反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc"));
//调用获得的方法时要用到上面相同类型的实例对象。
4.Class.newInstance()方法:
例子:String obj=(String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象
9,用反射给一个类创建实例对象的过程:class 到 constructor 再到 new object