A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jxlovqqvo 中级黑马   /  2014-12-21 18:02  /  1426 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类在什么时候加载?创建对象的时候么?

8 个回复

倒序浏览
new 类名       的时候就是加载的时候了
回复 使用道具 举报
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");
    }
}

我就是理解到这里,是行得通的
回复 使用道具 举报
先有类才有对象,
回复 使用道具 举报
我理解的应该是只要涉及到对该类的操作就会加载吧
回复 使用道具 举报
类应该是创建对象之前就先加载,例如

Person p = new Person();

1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
回复 使用道具 举报
在你创建对象或者调用这个类中的静态的时候,他就被加载在内存中了
回复 使用道具 举报
从程序运行的角度来看,每个java虚拟机对一个类只初始化一次。java程序每运行一次,系统只为类变量分配一次内存。new 是堆内存空间中为实体分配内存。而类是在静态存储空间的。
回复 使用道具 举报
在调用类加载器的时候就会加载入内存中,产生字节码文件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马