| English | 意味 |
|---|---|
| constructor/kənˈstrʌktə/ | コンストラクタ |
| instantiation/ˌɪnstænʃɪˈeɪʃn/ | インスタンス化 |
新しいオブジェクトを作成する
- オブジェクトを作成するには、
newキーワードとコンストラクタを使用します。 Scanner sc = new Scanner(System.in);は新しいScannerオブジェクトを作成します。- インスタント化とは、クラスからオブジェクトを作成する行為です。
- コンストラクタはオブジェクトの初期状態を設定します。
コンストラクタの引数
- コンストラクタは、新しいオブジェクトを構成するための引数を受け取ることができます。
new Random(42)は乱数生成器をシードし、new String("hi")はテキストを複製します。- 引数は、位置と型でコンストラクタのパラメータと一致します。
- 異なるコンストラクタ(オーバーロード)により、同じクラスを異なる方法で作成できます。
参照の保存
newはオブジェクトへの参照を返すので、適切な型の変数に格納します。Scanner sc = new Scanner(System.in);——scは今、そのオブジェクトを指しています。- オブジェクトはメモリ上に存在し、
scはただそれを指すラベルに過ぎません。 - 参照を失う(変数に格納しない)と、オブジェクトに到達できなくなります。
2つの変数、1つのオブジェクト
- 一つのオブジェクト変数に別のものを割り当てることは、オブジェクトそのものではなく参照をコピーすることを意味します。
Scanner sc2 = sc;— 現在、scとsc2は 同じ Scanner を指しています。sc2を通じた変更はscからも確認できます — 実際には一つだけのオブジェクトだからです。- この参照のコピー動作は、オブジェクトの定義的な特徴(かつ罠)です。
new は ONE (1つ) のオブジェクトを作成し、それに対する参照を返します。 その変数をもう一つの変数に割り当てる(b = a;)と、参照がコピーされるため、両方の名前は 同じ オブジェクトを指します — 二つ目のコピーではありません。プリミティブ型(int y = x; は値をコピーする)と対比してください。これを忘れると、「bを変えたのに、なぜaも変わった?」という驚きの結果になります。
インスタンス化とエイリアス化:
Random r = new Random();→rは新しい Random オブジェクトを指します。Random r2 = r;→r2は 同じ オブジェクトを指します(新しいオブジェクトは作成されていません)。rとr2は今や、一つのジェネレーターの状態を共有しています。
new に コンストラクタ(インスタンス化)を追加してオブジェクトを作成します:new Scanner(System.in) 。new は変数に格納できる 参照 を返します。一つのオブジェクト変数に別のものを割り当てることは 参照をコピーする ことであり、その後両方は 同じ オブジェクトを参照します(プリミティブ型のように値をコピーするわけではありません)。
new は1つのオブジェクトを作成し、= は参照をコピーする。
r と r2 は1つのオブジェクトを共有する;x と y は独立した写しである。
新しいオブジェクトを作成するキーワードはどれか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
new とコンストラクタによりオブジェクトがインスタンス化される。
新しいオブジェクトを構築するために呼ばれる特別なメソッドは ___ である。(単語一つで答えよ)
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
コンストラクタは新しいオブジェクトを設定する。
Random r2 = r; 文の実行後、いくつの Random オブジェクトが存在するか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
代入はオブジェクトではなく参照をコピーするため、依然として1つのオブジェクトである。
オブジェクト変数をもう一つの変数に代入する(b = a)ことは、別の独立したオブジェクトを作成することにはなりません。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
参照をコピーするため、両者は同じオブジェクトを指している。
プリミティブの場合、int y = x; は値をコピーするため、x と y は独立している。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
プリミティブは値をコピーし、オブジェクトは参照をコピーする。