Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. class / new / コンストラクタ / this

class / new / コンストラクタ / this

クラスを定義してインスタンスを生成する基本的な構文です。『class』でクラスを定義し、『new』でインスタンスを生成します。コンストラクタはインスタンス生成時に自動的に呼び出される特別なメソッドです。

構文
// クラスの定義です。
class ClassName {
    // フィールド(インスタンス変数)
    型 フィールド名;

    // コンストラクタ(クラス名と同じ名前・戻り値なし)
    ClassName(引数) {
        this.フィールド名 = 引数;
    }

    // メソッド
    戻り値型 メソッド名(引数) {
        // 処理
    }
}

// インスタンスを生成します。
ClassName obj = new ClassName(引数);

// メソッド・フィールドにアクセスします。
obj.メソッド名();
obj.フィールド名;

// thisキーワード:同じクラス内の別のコンストラクタを呼び出します。
this(引数);
キーワード・構文一覧
キーワード概要
classクラスを定義します。フィールド・コンストラクタ・メソッドをまとめた設計図です。
newクラスのインスタンス(オブジェクト)をヒープメモリ上に生成します。
コンストラクタクラス名と同じ名前で戻り値型のない特別なメソッドです。new 時に自動的に呼び出されます。
this現在のインスタンス自身を指します。フィールドと引数の名前が衝突する場合に this.フィールド名 で区別します。
this(引数)同じクラスの別のコンストラクタを呼び出します。コンストラクタの先頭行で使用します。
サンプルコード
// Personクラスを定義します。
class Person {
    String name;
    int age;

    // コンストラクタ
    Person(String name, int age) {
        this.name = name; // thisでフィールドと引数を区別します。
        this.age = age;
    }

    // デフォルトコンストラクタ(thisで他のコンストラクタを呼び出します)
    Person(String name) {
        this(name, 0); // Person(String, int) を呼び出します。
    }

    // メソッド
    String greet() {
        return "こんにちは、" + this.name + "です。";
    }
}

// インスタンスを生成してメソッドを呼び出します。
Person alice = new Person("Alice", 30);
System.out.println(alice.greet()); // 『こんにちは、Aliceです。』と出力されます。
System.out.println(alice.age);     // 『30』と出力されます。

Person bob = new Person("Bob");
System.out.println(bob.age); // 『0』と出力されます。

// 複数のインスタンスはそれぞれ独立したフィールドを持ちます。
Person carol = new Person("Carol", 25);
System.out.println(carol.name); // 『Carol』と出力されます。
概要

Javaのクラスはフィールド・コンストラクタ・メソッドで構成されます。コンストラクタは戻り値型を持たず、クラス名と同じ名前で定義します。コンストラクタを定義しない場合、引数なしのデフォルトコンストラクタがコンパイラによって自動生成されますが、引数ありのコンストラクタを定義した場合は自動生成されません。

『this』キーワードはフィールド名と引数名が同じ場合の区別や、コンストラクタチェーンに使います。『this(引数)』はコンストラクタの先頭行にしか書くことができません。

アクセス修飾子(public / private など)については『public / private / protected / static / final』を、継承については『extends / super / @Override』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。