黑马程序员技术交流社区
标题:
对象初始化顺序
[打印本页]
作者:
一帆风顺
时间:
2012-10-5 22:37
标题:
对象初始化顺序
本帖最后由 王博 于 2012-10-5 22:43 编辑
//对象初始化顺序
public class A extends Letter
{
//非静态成员变量
int a1=10;
int a2=am();
//静态成员变量
static int sa1=20;
static int sa2=sam();
//非静态代码块
{
System.out.println("A's instance initialize block");
}
//静态代码块
static{
System.out.println("A's static initialize block");
}
//非静态方法
int am()
{
System.out.println("A's instance method");
return 21;
}
//静态方法
static int sam()
{
System.out.println("A's static method");
return 11;
}
//构造方法
public A(String s)
{
super(s);
System.out.println("A's constructor");
}
//main方法
public static void main(String[] args)
{
new A("class A'constructor paramter");
}
}
class Letter
{
//非静态成员变量
int l1=30;
int l2=lm();
//静态成员变量
static int sl1=40;
static int sl2=slm();
//非静态代码块
{
System.out.println("Letter's instance initialize block");
}
//静态代码块
static{
System.out.println("Letter's static initialize block");
}
//非静态方法
int lm()
{
System.out.println("Letter's instance method");
return 31;
}
//静态方法
static int slm()
{
System.out.println("Letter's static method");
return 41;
}
//构造方法
public Letter(String s)
{
System.out.println("Letter's constructor");
System.out.println("The parameter\" "+s+"\" from A has reach ");
}
}
输出结果
QQ截图20121005222358.png
(13.84 KB, 下载次数: 15)
下载附件
2012-10-5 22:40 上传
作者:
姬仁贵
时间:
2012-10-6 12:46
Person p = new Person("lisi",30);
该句话都做了什么事情?
1、因为new用到了Person.class所以会先找Person.class文件并卡加载到内存中。
2、执行该类中的static代码块,如果有的话。给Person.class类进行初始化。
3、在堆内存中开辟空间分配内存地址。
4、在堆内存中建立对象的特有属性。并进行默认初始化。
5、对属性进行显示初始化。
6、对对象进行构造代码块初始化。
7、对对象进行对应的构造函数初始化。
8、将内存地址赋给栈内存中的p。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2