拷贝的。差不多就是这个意思。
Class.forName()会对类初始化,而loadClass()只会装载或链接。可见的效果就是类中静态初始化段及字节码中对所有静态成员的初始工作的执行(这个过程在类的所有父类中递归地调用). 这点就与ClassLoader.loadClass()不同. ClassLoader.loadClass()加载的类对象是在第一次被调用时才进行初始化的。
你可以利用上述的差异. 比如,要加载一个静态初始化开销很大的类, 你就可以选择提前加载该类(以确保它在classpath下), 但不进行初始化, 直到第一次使用该类的域或方法时才进行初始化
Class.forName()会对类初始化,而loadClass()只会装载或链接。可见的效果就是类中静态初始化段及字节码中对所有静态成员的初始工作的执行(这个过程在类的所有父类中递归地调用). 这点就与ClassLoader.loadClass()不同. ClassLoader.loadClass()加载的类对象是在第一次被调用时才进行初始化的。
你可以利用上述的差异. 比如,要加载一个静态初始化开销很大的类, 你就可以选择提前加载该类(以确保它在classpath下), 但不进行初始化, 直到第一次使用该类的域或方法时才进行初始化
解决方案 »
- java 读取excel的问题
- 我想学java,不知用什么开发工具好,请大师门给指个路!
- 本人失业了,倾囊…………散分
- 关于java多态性的研究,请教高手???
- 请朋友们帮忙解释两句Python语句
- 帮忙看看这个程序??是什么问题??
- 怎么招聘.net的跑到java这里来了,斑竹快删除他们.Java与.net势不两立.干掉微软
- 无法解决的问题。(在线等)
- 我想学习JAVA, 应该如何下手, 选用什么工具?
- 奇怪,究竟有多少人用JBuilder的project功能,我看很多人都只是简单用用JBuilder?
- 【在线等.....】有没有好心人帮我看一段代码啊,我看不太懂......
- 告诉你一个真实的秘密:Java太烂了!会被淘汰!
类里定义的成员变量,可不赋初值,若不赋初值则JAVA会按上表为其添加默认值;
方法里定义的局部变量,变量在参与运算之前必须赋初值,jvm不负责为局部变量赋值,在使用时必须自己显式初始化,否则就会报你上面的错误。接下来说下类的加载包含new的过程以及哪些情况进行初始化哪些情况不需要初始化,给你介绍两篇文章,看完后就很清楚了:
http://blog.csdn.net/xiaoyufu007/article/details/6654377
http://java.chinaitlab.com/advance/26623.html
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由结果我们可以看出,类中成员变量在构造方法开始时,就已经被赋予了相应的值,如果成员标量中基本数据类型已经进行了直接赋值,那么进入构造方法时就等于所赋之值,如果成员变量在进入构造方法之前没有赋值,那么就使用默认值进入构造方法体中。
需要强调的时,默认赋值在构造方法之前,不是之后。