先看这句话:
对于反射机制来说 .class文件在编译时是不可获取的 所以是在运行打开和检查.class文件 
我的疑问:
如:当我使用new 创建一个对象的时候 编译器在编译时打开和检查.class文件了吗
请最好能结合Class对象说说为什么说反射是在运行是获取类型信息 它和其它的机制有什么不同
谢谢

解决方案 »

  1.   

    :当我使用new 创建一个对象的时候 编译器在编译时打开和检查.class文件了吗 在classload时检查.class文件,或者说也是运行时吧
    我印象是这样的
      

  2.   

    当我使用new 创建一个对象的时候 编译器在编译时打开和检查.class文件了吗  ?RE:这个是不打开的啊,编译器只是负责检查常规语法错误。new也是一个语法而已,他仅仅检查语法是否正确,并不创建一个对象,创建一个对象的时候是由JVM来执行的,而不是编译器。反射的设计就是用来在运行的时候获取类自身的信息的。所以没有什么为什么反射是获取自身信息的说法。呵呵。
      

  3.   

    假如要创建一个A对象 那么编译器至少要知道在路径有没有A这个类吧 
    用这个A对象来调用方法 编译器至少要知道A类中是不是有这个方法吧
    如果是这样 编译器不就需要加载这个A类还要打开检查吗
    怎么说不打开呢 小弟真的不懂 请高手帮忙 谢谢
      

  4.   

    new 是jvm默认的装载器装在
    反射是指定时间装载
      

  5.   


    反射是程序运行时动态获取对象类型信息和能力的一种机制,跟编译没多大关系。编译时是根据 class 文件中关于类的描述来进行语法检测,检测你源代码中类的使用是否正确,例如用到的方法是否存在,方法参数类型是否匹配等。
      

  6.   

    同为生成BB类(假设其不存在)的对象: 
    public class AA {
        public static void main(String[] args) throws Exception {
            Class.forName("BB").newInstance();//运行时检查
            new BB();//编译时检查
        }
    }