代码如下
Test().change();
Test();
}
class Test {
factory Test() => Test.print();
var a = 1;
change() {
a = 2;
print('change$a');
}
Test.print() {
print('print$a');
}
}
为什么会出现这样的结果
print1
change2
print1
最好能详细讲解一下,或者给出相关关键词,我自己去查资料
1
AoEiuV020JP 88 天前
没看出什么会让人困惑的点,明显是每次创建 Test 时打印 print1 ,一共两次, 调 change 时打印了 change2 ,
|
2
jifengg 88 天前
不如楼主你说说你原本希望是啥结果,这样大家就知道你哪里不清楚了。
我和一楼一样,觉得没啥困惑点。 |
4
Dnlyao OP 还有个问题,使用了工厂模式,他是会直接调用一次吗?就像第一次打印。我的理解是,main 中 1.change()。2 是 print().只有两个打印。
|
5
jifengg 88 天前
1:`factory Test() => Test.print();`
这里换成 ``` factory Test(){ Test.print(); } ``` 能让你更好理解。 2: `Test().change();` 等价于: ``` var t = Test(); // 就是你定义的 factory t.change(); ``` 这么拆解下来,能理解为什么先打印“print1”了吧? |
8
Dnlyao OP @jifengg 认真,真的理解不了这个。a 不是类里面的变量吗? change 方法改变了,为什么调用了,还是不行。还是说每次调用,等于 new Test()这样调用?
|
9
AoEiuV020JP 78 天前 1
9 天了,虽然没人回复,但我想楼主应该已经解决了吧,或者已经放弃编程了,
两个 Test()是生成了两个 Test 类的对象, 分别包含不同的 a ,第一个 Test 中的 a 确实改成 2 了, 但第二个 Test 中的 a 还是初始化时给的 1 , |
10
Dnlyao OP @AoEiuV020JP 理解,感觉半懂。感谢
|
11
sikong31 70 天前 1
这是成员变量,不是类变量,更不是捕获局部变量。成员变量自然每次创建都会是初始化的值
|