Java|Java面试问答——反射原理( 二 )


在没有对象实例的时候 , 主要有两种办法 。
//获得类类型的两种方式
Class cls1 = Role.class;          
Class cls2 = Class.forName(\"yui.Role\");  

注意第二种方式中 , forName中的参数一定是完整的类名(包名+类名) , 并且这个方法需要捕获异常 。 现在得到cls1就可以创建一个Role类的实例了 , 利用Class的newInstance方法相当于调用类的默认的构造器 。
Object o = cls1.newInstance();   
//创建一个实例
//Object o1 = new Role();   //与上面的方法等价

二.常用方法1.isPrimitive(判断是否是基本类型的字节码)
输出结果
2.getConstructor和getConstructors()
java中构造方法没有先后顺序 , 通过类型和参数个数区分 。
3.Filed类代表某一类中的一个成员变量 。
三.典型例题1.将所有String类型的成员变量里的b改成a 。
2.写一个程序根据用户提供的类名 , 调用该类的里的main方法 。
为什么要用反射的方式呢?
3.模拟
instanceof
操作符
在这个例子中创建了一个S 类的 Class 对象 , 然后检查一些对象是否是S的实例 。 Integer(37) 不是 , 但 new S()是 。
四.Method类
代表类(不是对象)中的某一方法 。
五.数组的反射Array工具类用于完成数组的反射操作 。
同类型同纬度有相同的字节码 。
int.class和Integer.class不是同一份字节码 , Integer.TYPE , TYPE代表包装类对应的基本类的字节码 int.class==Integer.TYPE 。
六.结束语以上就是反射机制的简单的使用 , 显然学过spring的朋友一定明白了 , 为什么可以通过配置文件就可以让我们获得指定的方法和变量 , 在我们创建对象的时候都是通过传进string实现的 , 就好像你需要什么 , 我们去为你生产 , 还有我们一直在用Object这就说明java语言的动态特性 , 依赖性大大的降低了 。


推荐阅读