thisはどこからコレなのか
Javaで下のコードを実行すると何が表示されるでしょう。
public class ScopeOfThis { public int a = 100; public ScopeOfThis() { System.out.println("first:" + a); class Foo { public int a = this.a++; public Foo(){ int a = this.a++; System.out.println("inside(a):" + a); System.out.println("inside(this.a):" +this.a); } } new Foo(); System.out.println("last:" + a); } public static void main(String[] args) { new ScopeOfThis(); } }
いきなり答えだと考えるチャンスを奪ってしまうのでスポイラー代わりに
Pythonで似たようなことを書いてみました。
下のように書くと:
class ScopeOfThis(object): a = 100 def __init__(self): print "first:", self.a class Foo(object): a = self.a self.a += 1 def __init__(self): a = self.a self.a += 1 print "inside(a):", a print "inside(self.a)", self.a Foo() print "last:", self.a ScopeOfThis()
こう表示されます:
first: 100 inside(a): 100 inside(self.a) 101 last: 101
-
-
-
- -
-
-
解答篇:
Javaで上のコードを実行すると下のように表示されます。
first:100 inside(a):0 inside(this.a):1 last:100
Fooのフィールドを初期化する時点ですでにthisはFooのインスタンスを指しているわけですね〜。
疑問点
- public int a = this.a++;をpublic int a = a++;にするとコンパイルエラーになる。