黑马程序员--05反射的学习

来源:互联网 发布:js dom 添加属性 编辑:程序博客网 时间:2024/04/26 03:53

------- android培训、java培训、期待与您交流! ----------

 java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则是由这个类的实力对象来确定的,不同的

实力对象有不同的属性值。java程序中的各个java类,他们是否属于同一类事物,是不是可以用一个累来描述这类事物呢?这个类的明智就是Class

不是class。

对应各个类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不on过得,所以他们在内存中的

内容是不同的,这一个个的就on感觉可分别用一个个的对象来表示,这些对象都具有相同的类型。

int.class==Integer.TYPE

Class.isArray()

如:

public class ReflectTest {
 public static void main(String[] args) throws Exception{
  String str1 = "abc";
  Class cls1 = str1.getClass();
  Class cls2 = String.class;
  Class cls3 = Class.forName("java.lang.String");
  System.out.println(cls1 == cls2);//结果:true
  System.out.println(cls2 == cls3);//结果:true

  System.out.println(cls1.isPrimitive());//isPrimitive()是否是原是类型  结果:false
  System.out.println(int.class.isPrimitive());//结果:true
  System.out.println(int.class == Integer.class);//结果:false
 }
}

反射就是把java类中的各种成分映射成相应的java类。

Constructor类

得到某个类所有的构造方法:

      如:Constructor []  constructors=Class.forName("java.lang.String").getConstructors();

得到某一个构造方法:

    如:Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);

创建实例对象:

   通常方式:String str=new String(new StringBuffer("abc"));

   反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc"));

 //new StringBuffer(new StringBuffer("abc"))
  Constructor constructor1=String.class.getConstructor(StringBuffer.class);
  String str2=(String)constructor1.newInstance(new StringBuffer("abc"));
  System.out.println(str2);

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

Class.newInstance()方法

    如:String obj=(String)Class.forName("java.lang.String").newInstnce();

    该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。

    该方法用到了缓存机制来保存默认构造方法的实例对象。

 

------- android培训、java培训、期待与您交流! ----------  详细请查看:http://edu.csdn.net/heima/