作者godfat (godfat 真常)
看板java
标题Re: [问题] 在建构子杀掉自己的问题
时间Tue Mar 20 21:42:54 2007
※ 引述《montreal (╮(╯3╰)╭)》之铭言:
: public class Tester {
: AnotherClass aClass = null;
: public Tester() {
: aClass = new AnotherClass(this);
^^^^^^^^^^^^^^^^^^^^^^
这里把 aClass 设为 null, 然後呢?
new 会传回东西是吧?
所以 aClass != null
: if(aClass == null)
: System.out.println("aClass == null");
: else
: System.out.println("aClass != null");
: }
: public void killAnotherClass() {
: aClass = null;
: }
: class AnotherClass {
: AnotherClass(Tester parent) {
: parent.killAnotherClass();
^^^^^^
其实 nested class 本身就有 pointer/reference 指向 enclosing class
所以这边不用吃 parent, 直接 killAnotherClass(); 即可
多传 parent 就变传两次了(其中一次是 compiler 帮你做掉的)
: }
: }
: public void killAnotherClass() {
: aClass = new AnotherClass(this, "name b");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c'tor 还没结束又再次唤起,你知道了
基本上 stack 会 overflow 大概有 99% 是无穷递回
: }
: class AnotherClass {
: String name;
: AnotherClass(Tester parent, String _name) {
: name = _name;
: parent.killAnotherClass();
: }
: }
--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.
Sacrifice
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.30.220