拷贝的。差不多就是这个意思。
Class.forName()会对类初始化,而loadClass()只会装载或链接。可见的效果就是类中静态初始化段及字节码中对所有静态成员的初始工作的执行(这个过程在类的所有父类中递归地调用). 这点就与ClassLoader.loadClass()不同. ClassLoader.loadClass()加载的类对象是在第一次被调用时才进行初始化的。
你可以利用上述的差异. 比如,要加载一个静态初始化开销很大的类, 你就可以选择提前加载该类(以确保它在classpath下), 但不进行初始化, 直到第一次使用该类的域或方法时才进行初始化

解决方案 »

  1.   

    继承Person的时候new了下面的ab没有new没有对象所以报错了
      

  2.   

    首先先来说下你上面出错的原因:
        类里定义的成员变量,可不赋初值,若不赋初值则JAVA会按上表为其添加默认值;
        方法里定义的局部变量,变量在参与运算之前必须赋初值,jvm不负责为局部变量赋值,在使用时必须自己显式初始化,否则就会报你上面的错误。接下来说下类的加载包含new的过程以及哪些情况进行初始化哪些情况不需要初始化,给你介绍两篇文章,看完后就很清楚了:
    http://blog.csdn.net/xiaoyufu007/article/details/6654377
    http://java.chinaitlab.com/advance/26623.html
      

  3.   

    Person自定义类里的那几个成员变量都是全局变量具有默认值,不赋值可以使用。int 是0 float是0.0 String是null,a,b是局部变量没有默认值,要初始化才能使用,说起来貌似跟new没什么直接关系。
      

  4.   

    Person类没有定义构造方法,所以系统默认Person类拥有一个空的无参构造方法,在Person类继承至Object类,所以在使用new关键字创建Person类实例时调用构造方法是这样的
     Person(){
    super();
    ....(内容为空)
    }new关键字创建实例就是在堆中开辟空间,然后将类中属性初始化并存入的过程。当然,上面都是废话需要说明的是,类在构造方法中对类中的成员变量完成初始化操作,
    那么那些没有明文进行初始化操作的变量又是什么命运呢
    java为这些没有进行初始化的成员变量规定了默认值, 如前面所说, int 等基本数据类型 为 0  对象成员为null。
    至此已经基本上解决问题了另外 需要给楼主扩充的是(也就是标题所问,java中一个类的属性何时进行初始化?)
    通过如此实验即可理解public class Text {
    int a=1;
    int b;
    Object o;
    public Text(){
    System.out.print(a+"\t"+b+"\t"+o);
    }
    public static void main(String[] args){
    new Text();
    }
    }1 0 null由结果我们可以看出,类中成员变量在构造方法开始时,就已经被赋予了相应的值,如果成员标量中基本数据类型已经进行了直接赋值,那么进入构造方法时就等于所赋之值,如果成员变量在进入构造方法之前没有赋值,那么就使用默认值进入构造方法体中。
    需要强调的时,默认赋值在构造方法之前,不是之后。