黑马程序员_Java高新技术之反射 Constructor类

---------------------- ASP.Net+Android+IO开发S、 .Net培训、期待与您交流! ----------------------
lConstructor代表某个类中的一个构造方法
l得到某个类所有的构造方法:
Ø例子:Constructor [] constructors= Class.forName("java.lang.String").getConstructors();
l得到某一个构造方法:
Ø例子:      Constructorconstructor= Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

  //获得方法时要用到类型

l创建实例对象:
Ø通常方式:String str = new String(new StringBuffer("abc"));
Ø反射方式:String str = (String)constructor.newInstance(new StringBuffer("abc"));

  //调用获得的方法时要用到上面相同类型的实例对象

lClass.newInstance()方法:
Ø例子:String obj = (String)Class.forName("java.lang.String").newInstance();
Ø该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。

该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例

2. 一个类有多个构造方法,用什么方式可以区分清楚想得到其中的哪个方法呢?根据参数的个数和类型,例如,Class.getMethod(name,Class... args)中的args参数就代表所要获取的那个方法的各个参数的类型的列表。重点:参数类型用什么方式表示?用Class实例对象。例如:

int.class(int []).class

int [] ints =new int[0];

ints.getClass();

Constructor对象代表一个构造方法,Constructor对象上会有什么方法呢?得到名字,得到所属于的类,产生实例对象。

3. 讲解创建实例对象时,先应该举例说说通常情况下是怎样做的, String str =new String(new StringBuffer(abc));

然后再说用反射如何做

      String str =(String)constructor.newInstance(/*"abc"*/newStringBuffer("abc"));

      System.out.println(str);

讲反射方式创建实例对象时,先故意用string作为参数传进去,根据错误让大家感受到确实是那个构造方法,然后再改为传一个StringBuffer类型的参数进去,  String str =(String)constructor.newInstance(/*"abc"*/newStringBuffer("abc"));

好比,我叫来一个吃人不吃草的恐龙,等到它要吃东西时,我得给他送真人去了吧。

---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------

你可能感兴趣的:(黑马程序员_Java高新技术之反射 Constructor类)