黑马程序员技术交流社区
标题:
对象初始化内存加载顺序;
[打印本页]
作者:
华行天下
时间:
2013-8-15 14:01
标题:
对象初始化内存加载顺序;
对象初始化内存加载顺序;希望能够详细的说一下,谢谢;
作者:
吃阁子的猫
时间:
2013-8-15 15:52
这个老师给我们做过重点讲解,我分点给你写写
1,静态加载进内存
2,在栈中开辟main空间,创建变量
3,在对内存中开辟空间,分配地址
4,默认初始化
5,显示初始化
6,构造代码块初始化
7,构造函数初始化
8,将内存地址赋给变量,变量指向堆内存实体
作者:
黄文军
时间:
2013-8-15 19:16
本帖最后由 黄文军 于 2013-8-15 19:23 编辑
/**
对象初始化内存加载顺序;希望能够详细的说一下
可以下毕向东老师讲的教程,讲的很详细,还画的有图
.1)静态加载进代码内存 如果有静态代码块, 先把静态代码块加载进代码内存 并执行静态代码块,静态代码块不管创建几个对象都只执行一次;
.2)在堆内存创建对象,开辟空间,对象初始化, 有构造代码块先执行构造代码块,再执行构造函数。 构造代码块与构造函数,每创建一个对象就运行一次;
.3)把堆内存创建对象的地址空间赋值给st1,st1指向堆内存创建的实体
*/
class Test01
{
public static void main(String[] args)
{
Student st1 = new Student(13,"zhang");//创建对象st1
Student st2 = new Student(14,"li");//创建对象st1
st1.print();//调用函数
System.out.println();
st2.print();//调用函数
}
}
class Student
{
int age;
String name;
private static String school;
//静态代码块 是自动执行的,最先执行,一般用以初始化共有数据
static
{
school = "itheima";
System.out.println("静态代码块");
}
//构造代码块 用以初始化变量
{
System.out.println("构造代码块");
}
//定义构造函数 初始化对象
Student(int age,String name){
this.age= age;
this.name = name;
System.out.println("构造函数");
}
//用以打印输出学生信息
void print(){
System.out.println("name"+name+"\nage"+age+"\nschool"+school);
}
}
复制代码
作者:
张俊生
时间:
2013-8-15 23:59
亲,如问题已解决请将分类的未解决改为已解决。
以后的问题贴也要及时更改分类哦~
保持队形,谢谢合作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2