コース一覧
    Java入門:クラスとオブジェクト
    インスタンスを作る

    Java入門:クラスとオブジェクト

    クラスとオブジェクトの設計を学び、状態と振る舞いを持つJavaプログラムを組み立てられるようにします。

    1
    クラスとオブジェクト
    01. クラスを定義する5分
    02. クラスにフィールドを持たせる12分
    03. クラスにメソッドを定義する5分
    04. インスタンスを作る5分
    05. コンストラクタ5分
    06. this キーワード5分
    07. カプセル化 (private と getter)12分
    08. Person クラスを作る5分
    09. Product クラスで税込価格15分
    10. 銀行口座クラス15分
    11. toString のオーバーライド5分
    12. クラスとオブジェクト クイズ5分
    13. Java 入門 最終クイズ5分

    インスタンスを作る

    Ticket t; と書いた時点では、チケットはまだ 1 枚もありません。この行が用意したのは、チケットを指すための変数だけです。そのまま t.seat に触ると NullPointerException で止まります。設計図を書いたことと、実体があることは別の話です。

    new は、その場で 1 つ作る命令

    実体を生み出すのは new です。

    Java

    Ticket t;         // 指す先がまだ無い。t は null
    t = new Ticket(); // ここで実体が 1 つ生まれ、t がそれを指す
    t.seat = "A-12";

    new Ticket() がやっているのは 2 つです。Ticket が持つべきフィールドの分だけ置き場所を確保し、そこを指す情報を返します。返ってきた情報を変数に入れておくから、あとから t.seat で辿り着けます。

    いつも書いている Ticket t = new Ticket(); は、この 2 行を 1 行にまとめた形です。実際の開発でもほとんどの場面でこちらを使います。

    new を書いた回数だけ増える

    new は、書くたびにまったく新しい実体を作ります。

    Java

    Ticket a = new Ticket();
    Ticket b = new Ticket();
    System.out.println(a == b); // false

    a と b は別の場所を指しているので、== で比べても false です。フィールドに同じ値を入れても結果は変わりません。== はオブジェクトに対しては、中身が同じかではなく、同じ実体かを聞く演算子だからです。

    変数が握っているのは、実体そのものではない

    ここが new の山場です。変数に入っているのは実体のコピーではなく、実体の置き場所を指す矢印です。だから = で別の変数に渡しても、実体は増えません。

    Java

    Ticket a = new Ticket();
    a.seat = "A-12";
    
    Ticket c = a;  // 矢印が 1 本増えただけ
    c.seat = "B-3";
    
    System.out.println(a.seat); // B-3。触っていない a も変わっている

    new を書いていないので、実体は最初の 1 つのままです。a と c はその 1 つを両側から指しているだけなので、どちらから書き換えても同じものが変わります。実体を 2 つにしたいなら、new をもう 1 回書くしかありません。

    やってみよう

    instantiateAndGet() は、自分で定義した型から実体を 1 つ作り、その実体のメソッドを呼んだ結果を返します。

    • Solution の中に static class で型を 1 つ定義します。フィールドは要りません
    • その型に、String を返すメソッドを 1 つ持たせます。返す文字列は課題の要件のとおりです
    • instantiateAndGet() の中で new を書き、返ってきた実体からメソッドを呼びます
    • 文字列をそのまま return しても表示は合いますが、new が 1 度も走っていません

    要件

    1. Solution クラスの中に Book クラスをネストで定義すること (static class Book 推奨)
    2. Book クラスに read() のような戻り値が String のメソッドを持たせ、"Hello, Object!" を返すこと
    3. instantiateAndGet() の中で new Book() でインスタンスを作り、その戻り値を return で返すこと

    ヒント

    `static class Book { String read() { return "Hello, Object!"; } }` のように、`Solution` の中に `static` 付きでネストするのが一番扱いやすいです

    インスタンスは `Book b = new Book();` のように、型・変数名・`new クラス名()` の順で書きます。`new` を忘れるとインスタンスは作れません

    作ったインスタンスのメソッドはドットで呼びます。`b.read()` の戻り値をそのまま `return` すれば OK です

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • コンストラクタ

      オブジェクトを生まれた瞬間に初期化する仕組み、コンストラクタを学ぼう。new でクラスを呼び出すときに何が起きているのかを追いかけながら、Book クラスを組み立てて本のフルタイトルを返すメソッドを完成させる。

    • this キーワード

      this は「このオブジェクト自身」を指す参照です。フィールドと引数の名前衝突を解決したり、メソッドチェーンを書いたり、別のコンストラクタを呼んだりするために使います。

    • カプセル化 (private と getter)

      `private` フィールドと `public` な getter / setter を使って、データを安全に守る「カプセル化」を学ぼう。負の入金を弾く `safeAccount(int initial, int deposit)` を書く。

    • Person クラスを作る

      Person クラスを設計しながら、フィールド・コンストラクタ・メソッドの基本を身につけよう。インスタンスから自己紹介の文字列を取り出す課題に挑戦する。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 変数データに名前をつけて参照する仕組み
    • 設計何をどう作るかを決める前工程
    • フィールドクラスが持つデータ
    • オブジェクトキーと値のペアで構造を作るデータ
    • 演算子//は切り捨て除算(7 // 2 = 3)。
    • メソッドクラスに属する関数
    • クラスデータと振る舞いを束ねる単位
    • 戻り値呼び出し元への返答を表す点線矢印
    main.java
    エディタを読み込んでいます

    メモ

    インスタンスを作る

    ⌘S で保存