在博客上看到JAVA中反射中有如下功能:Java反射机制提供如下功能: 在运行时判断任意一个对象所属的类 
在运行时构造任意一个类的对象 
在运行时判段任意一个类所具有的成员变量和方法 
在运行时调用任一个对象的方法 
在运行时创建新类对象 
那么,疑问如下:
1 运行时判断任意一个对象所属的类
在软件中可以体现在哪些方面?个人的理解是防止对象初始化错误(说错了别笑话~~)2 运行时构造任意一个类的对象
任意一个类的对象完全可以NEW出来。与NEW操作相比,反射的优势体现在哪里?有没有劣势?3 运行时判断/调用任意一个类所具有的成员变量和方法
疑问同第2个。4 运行时创建新类对象
这个没看明白是什么意思。请指教。

解决方案 »

  1.   

    配置在xml文件中的依赖注入的对象从哪里来?答案尽在反射
      

  2.   

    写框架的时候为了做了同样肯定会用到比如将JSON处理中将一个对象映射成对应的字符串,还可以通过字符串转换为对应的对象,Hibernate也是这样
      

  3.   

    2 运行时构造任意一个类的对象
    任意一个类的对象完全可以NEW出来。与NEW操作相比,反射的优势体现在哪里?有没有劣势?很明显,new需要人显示的去编写代码,而使用反射则是一种自动化的工作,例如 
    使用new:  public Object function(String path){
                  if(path.equals("java.io.File")){
                       return new File("xxx");
                     }else if(path.equals("java.lang.Intager")){
                    return new Intager(0);
                 ......}
    使用反射 : public Object function(String path){
                    try{                    return Class.forNmae(“xx”).Instance /*没用IDE,手工编写,调用方法可能不对  */
             }catch(Exception e){
    .....
    }
                 }
    很显然后者更简单,可扩张性更好。
    3.运行时判断/调用任意一个类所具有的成员变量和方法
    疑问同第2个。
       这个在写框架中有比较广泛的使用,比如Hibernate。 Hibernate是如何将SQL查询出来的结果放进对象中的呢,其实就是调用pojo中的set方法,然而,hibernate不会知道你有多少属性,也不会知道有多少的set方法,这里就是使用反射回去到类中的方法,将执行相关的set方法将结果保存进对象。4 运行时创建新类对象
    这个没看明白是什么意思。请指教。
    这个我的理解如2,在运行时创建对象。
      

  4.   

    举一个使用反射的场景示例,我需要加载一个类,但是此类的class文件不在类路径上,需要从其他地方获取,如网络或者其他文件,这个时候就需要自定义类加载器,以定制的方式把类的全限定名转换成一个Java class文件格式的字节数组,加载出来要访问该对象的方法怎么办,就通过加载得到的Class对象通过反射来访问了,这种情况下普通程序无法完成.