JavaとOOPの新機能はここにあります。Javaでのオブジェクト作成の流れはどのようになりますか?
オブジェクトのメンバーがいつ使用できるかを理解しようとしています。具体的には、クラス内でインスタンス変数を呼び出すときに、インスタンス変数をコンストラクタに渡すことができないのはなぜですか?以下のコード例:
public class Point {
public String name;
{
name = "Henry";
}
public Point()
{
this(this.name); // cannot reference this before supertype constructor has been called
}
public Point(String name)
{
this.name = name;
}
}
このような何かをする前に頼まれましたが、私はここで説明するよ何Googleに依頼する方法を知りませんでした。オブジェクト参照がまだ作成されていないので、this(this.name)
コール内でthis.name
を参照することはできませんが、コンストラクタをどのように呼び出しているのですか?オブジェクトは、new Point()
使用して作成された時点でのオブジェクトの参照は利用できるようになりますし、コンパイラは文句を言うために何を持っていないだろうというとき
そのコンストラクタが実行されようとしている唯一の時間です。変数にthis.name
を割り当てて、それをthis(variable)
に渡すことができれば、それはうまくいかないでしょうか?大きな違いは何ですか?私はここで何かを完全に誤解している。
これは明らかに間違っていた、私はそれを視覚化しています方法です:
Point myPoint = new Point();
myPoint.name
今あなたが達成できthis(this.name) // which should be "Henry"
ボーリングの詳細は、主にhttps://docs.oracle.com/javase/specs/jls/se8/html/jls-12.htmlに記載されています(あなたの場合、スーパークラスがそれを宣言していればどうなるでしょうか?あなたが何かを使う前にスーパーが走っていなければならない理由は大体です) – zapl
'new Point()'を実行すると 'new'のようなものが'ちょうどヒープ上に構築された「ポイント」オブジェクト(すべてのインスタンス変数/参照を保持するちょっとしたメモリ/ https://dzone.com/articles/java-object-memory)があります。最初に 'Object'を作成するつもりはありません。それは直接「ポイント」です。しかし、 'Point'は' Object'(継承を介して)なので、 'Object'コンストラクタはそれが期待するものを見つけるでしょう。したがって、あなたが '伸びる 'ときにあなたは持ち去ることができません。 – zapl