黑马程序员技术交流社区
标题:
程序的执行顺序问题?
[打印本页]
作者:
全海波
时间:
2012-7-6 14:27
标题:
程序的执行顺序问题?
本帖最后由 全海波 于 2012-8-4 09:51 编辑
class PersonDemo
{
public static void main(String[] args)
{
//当new一个对象时候,那么对象就有了属性,接下来就是默认初始化
Person p = new Person();
}
}
class Person
{
//成员变量
String name;//请问class文件加载进内存时,如果没有建立对象,这些成员变量早就优先于一下其他的的成员存在?????????
int age;
static String country = "CN";
//构造函数
Person()
{
..................
}
//构造代码块
{
//里面是给对象初始化的内容
.................. }
static
{
//给类进行初始话的内容
........
}
}
/*
new 找 .class 文件,将其从硬盘加载进内存空间
*/
作者:
赵志勇
时间:
2012-7-6 14:41
首先:Person p = new Person();
你不新建对象,类怎么会加载进你内存呢?新建对象的时候才会调用.class文件的,才会加载,不引用.class文件哪来的成员变量?
其次:如果建立过对象Person p1 = new Person(); Person p2 = new Person();
新建p1的时候.class文件加载过一次,那么p1的成员变量是不是先于p2存在的,或者p2的成员变量,是不是先于p2存在,我想在才是你想问的吧
很明显,先建p1,p1的成员变量肯定先于p2存在,那么新建p2的时候p2的成员变量是不是先于p2存在?这个我想已经不是加载.class顺序的问题了,是应该好好看看老毕视频里面的类创建对象过程的问题了!!建议还是多看视频好,视频讲得比我说得明白多了!!不过可以跟你说一下,p2是引用,成员变量是对象身上的动向,先建对象再指向引用~~~还有,不新建对象不加载.class文件,加载过的,如果不是短期再新建对象,.class文件也会被清空出内存,成员变量和对象的生命周期是一样的!希望能帮到你!!
作者:
汤密奕
时间:
2012-7-6 17:00
对象的初始化过程:
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。
作者:
游兴钟
时间:
2012-7-6 21:56
本帖最后由 achilles 于 2012-7-6 22:03 编辑
子类对象建立的初始化顺序:父类静态代码块-->子类静态代码块-->父类构造代码块-->父类构造函数-->子类构造代码块-->子类构造函数(对应参数列表的)
另外:成员变量是伴随对象而存在的,只有静态成员的加载才会和类的加载有关,也就是说类加载的同时静态成员也随之加载进内存,这个和是否建立对象无关.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2