黑马程序员技术交流社区

标题: 类在什么时候加载? [打印本页]

作者: jxlovqqvo    时间: 2014-12-21 18:02
标题: 类在什么时候加载?
类在什么时候加载?创建对象的时候么?
作者: 提米特    时间: 2014-12-22 09:29
new 类名       的时候就是加载的时候了
作者: duluhua    时间: 2014-12-22 09:58
1.类的加载是在使用到该类的时候,就把该类的字节码加载进入内存。如果你没使用到该类,就不加载。我理解的是,无论在什么地方,只要涉及到该类、类方法、类成员变量等等,只要用到和该类相关的,就要加载类到内存。
2.对象是类的实例,只有你再new的时候,才创建类的实例。
3.举个例子:
------------------
class A{}
public class B{
    public static void main(String[] args){
         System.out.println("ddd");
    }
}
运行,只会加载B,执行main, 因为这里跟A没有任何关系,所以不加载A

-----------------------------------
对比:
class A{}
public class B{
    public static void main(String[] args){
         A a = new A();//创建了A的对象,也就是说用到A了,所以再这里需要加载A的字节码进入内存
                             //而对象a则是在new A()的时候创建的。
         System.out.println("ddd");
    }
}

我就是理解到这里,是行得通的
作者: 红楼    时间: 2014-12-22 21:48
先有类才有对象,
作者: reyzarc    时间: 2014-12-22 22:54
我理解的应该是只要涉及到对该类的操作就会加载吧
作者: aa524500    时间: 2014-12-22 23:03
类应该是创建对象之前就先加载,例如

Person p = new Person();

1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)

作者: 青衫禅客    时间: 2014-12-22 23:55
在你创建对象或者调用这个类中的静态的时候,他就被加载在内存中了
作者: c91764000    时间: 2014-12-23 00:13
从程序运行的角度来看,每个java虚拟机对一个类只初始化一次。java程序每运行一次,系统只为类变量分配一次内存。new 是堆内存空间中为实体分配内存。而类是在静态存储空间的。
作者: outsider1020    时间: 2014-12-23 11:13
在调用类加载器的时候就会加载入内存中,产生字节码文件




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2