最近看到了java的反射,颇为苦恼,不明白 new A()和(Class.forName("A")).newInstances()(A为一个类)有什么区别,当分别用着两种方法时,java虚拟机的工作机制有什么不同,想不通。
当我在控制台运行java命令或者在IDE中运行时java虚拟机为我做了什么?java的类加载机制?

解决方案 »

  1.   

    new A() 不用抛异常
    Class.forName("A").newInstances() 需要抛异常new B()  --B不存在  编译就过不去
    Class.forName("B").newInstances() --B不存在 编译可以过去简单一句就是:动态代码。
      

  2.   

    个人觉得new A()里面有私有方法,你获取不到 
    Class.forName("A")).newInstances()你能获取到所有方法
      

  3.   

    额 new a()是在编译期间的 而发射是在程序运行期获得类型信息
      

  4.   


    http://crabdave.iteye.com/blog/366559上面说能
      

  5.   

    en,真能,他把java的访问控制检查改了。