黑马程序员-Java高新技术_分析反射

        反射的基础是Class类,在面向对象的世界里任何事物都是一个对象,可以抽取相类似事物的共性,创建一个类。当然java里的class也是一类事物,描述它的是java里的Class类。
        java里每条代码都会编译成一条字节码,所以每定义一个类当然这个类最终也是通过一串字节码表示。所以每个类都有一个class成员变量,这样Class类的使用是这样的一种方式, 如:Class cls1 = String.class;获得类的字节码有三种方式,如String.class;String.getClass();Class.forName("类名");,反射里主要使用Class.forName();
        “反射就是把java里类个成分映射成相应的类”,这些类如:Method,Field,Contructer,Package等等。
         使用这些反射类创建目标类对象的方法有两种,通过Constructer.newInstance(),和Class.newInstance();
         知识点1:反射类是描述java里定义的类所有成分的类,它操作的都是类,不是对象。如反射类里的Field类,它想要操作某个具体对象得使用get方法传入对象。
         知识点2:jdk里描述数组类型,每一个数组,如果具有相同的元素类型,相同的维度(一维还是几维)都属同一个类型。反射数组用Array,操作数组用Arrays。
        知识点3:使用Method.invoke()时,由于低版本不支持不定参的特性,为了兼容低版本,当要调用的方法参数是一个数组时,调用invoke传入目标方法参数是一个数组,invoke方法会认为它是要调用方法的参数列表,而不会认为它是一个参数。这里的一个解决方案是用object数组包装下如:new object[]{new String[]{"1","2","3"}}.
        疑惑1:Field类能取到某个对象的成员变量,也你能通过暴力获取私有成员变量,但能不能改变私有成员变量的值了(经测试不能改变私有成员的值,但是没有捕捉到异常!)?
 
        

    详细请查看:http://edu.csdn.net/heima
posted @ 2012-04-16 17:43  lcode  阅读(177)  评论(0编辑  收藏  举报