关于构造函数

mingr6370 2003-10-19 09:05:42
class Tag {
Tag(int marker) {
System.out.println("Tag(" + marker + ")");
}
}

class Card {
Tag t1 = new Tag(1); // Before constructor
Card() {
// Indicate we're in the constructor:
System.out.println("Card()");
t3 = new Tag(33); // Reinitialize t3
}
Tag t2 = new Tag(2); // After constructor
void f() {
System.out.println("f()");
}
Tag t3 = new Tag(3); // At end
}

public class OrderOfInitialization {
public static void main(String[] args) {
Card t = new Card();
t.f(); // Shows that construction is done
}
} ///:~

结果是:
Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()

这是编程思想中的例子!
Card t=new Card()
这句会调用Card 这个类吗?如果调用的话,为什么要先执行Tag这个构造函数?他们的执行顺序是怎样的?望高手解答,谢谢!

...全文
43 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
truezerg 2003-10-21
  • 打赏
  • 举报
回复
比如有下面的代码

public class MyObj {
private Integer id;
private String myName;
private int age = 24; //变量初始值操作

public MyObj() {
this.id = new Integer(1);//在构造函数里为变量赋值
this.myName = "truezerg"; //在构造函数里为变量赋值
this.age = 23;
}
}

MyObj myObj = new MyObj();

创建一个MyObj类的对象所发生事情的顺序是:
1.首先分配内存来存放MyObj实例以及它的父类中的实例变量(在这里它的你类是java.lang.Object)
2.给实例变量初始化为相应的缺省值。 object references 为 null ,其它类型按照各自的缺省值初始化
比如上面的那段代码会将这三个属性设置成:
id = null;
myName = null;
age = 0;

3.调用这个MyObj的构造函数
4.MyObj类的构造函数首先调用它父类的构造函数。.. 以此类推,直到 java.lang.Object的构造函数为止。
5.当父类的构造函数一层层的返回,直到返回到MyObj的构造函数时,执行实例变量的设初始值操作(注意不是初始化)
上面的代码将会做的是:
age = 24;

6.执行构造方法中的为实例变量赋值操作。
上面的代码将会做的是:
this.id = new Integer(1); //注意,这里又创建了一个Integer对象,对于Integer对象的创建也按照这个步骤执行。
this.myName = "truezerg"; //这里又创建了一个String 对象,对于String 对象的创建也按照这个步骤执行。
this.age = 23;

7.将对象的引用 myObj 指向刚刚创建的这个对象
Mars_wx 2003-10-20
  • 打赏
  • 举报
回复
来晚了
caiyanying732 2003-10-20
  • 打赏
  • 举报
回复
这个例子应该是JAVA编程思想中的吧。
class中的初始化次序取决于变量在class中的定义次序。变量定义也许会散落各处,而且有可能介于各个函数定义之间。但所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化。所以例子中的:t1,t2,t3会在Card这个构造函数调用之前完成初始化。
mingr6370 2003-10-19
  • 打赏
  • 举报
回复
多谢各位!
allen830826 2003-10-19
  • 打赏
  • 举报
回复
首先执行定义变量或对象的语句,以及static块
然后是构造函数
最后是方法(当然要被调用才能执行)
liad 2003-10-19
  • 打赏
  • 举报
回复
讲义

初始化次序总结

① 类变量的默认初始化
② 类变量的初始化表达式或静态初始化块
有多个时,按类变量初始化表达式和静态初始化块在类文本中出现的次
序依次执行。
③ 实例变量的默认初始化
④ 实例变量的初始化表达式或实例初始化块
有多个时,按实例变量初始化表达式和实例初始化块在类文本中出现的
次序依次执行。
⑤ 构造方法
tripofdream 2003-10-19
  • 打赏
  • 举报
回复
类实例化时会先初始化成员变量,所以会先执行Tag t1 = new Tag(1);

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧