Javaを学んでいく中で結構混乱した部分をまとめます。
参考にしているのはProgateです。
1.インスタンスメソッド
インスタンスメソッドはインスタンスが持つ・インスタンスに持たせる「振る舞い」。
メソッドの定義の仕方
public <戻り値の型> <メソッド名>(){
<メソッドの中身>
}
のように書く。
メソッドの呼び出し方
/* Personクラスのインスタンス、person1を作成 */
Person person1 = new Person();
/* helloメソッドの呼び出し */
person1.hello();
のように呼び出す。
2.インスタンスフィールド
インスタンスフィールドはインスタンスが持つ情報を格納する変数。
インスタンスフィールドの定義の仕方
class Person {
/* 変数なので型を宣言する */
public String name;
}
インスタンスフィールドのアクセス方法
/* インスタンスを生成 */
Person person1 = new Person();
/* nameに値をセット */
person1.name = "Suzuki";
/* nameの値を取得 */
System.out.println(person1.name);
このようにアクセスできる。
3.クラスメソッド
クラスに属するメソッド。
クラスメソッドの定義の仕方
class Person {
public static <戻り値の型> <メソッド名>() {
<メソッドの中身>
}
}
※インスタンスメソッドと異なり、static
をつけることに注意。
クラスメソッドの呼び出し方
<クラス名>.<メソッド名>();
このように呼び出す。
親の顔ほど見たpublic static void <メソッド>(){ }
は実はクラスメソッドのこと。
4.クラスフィールド
クラスに属するフィールド。
クラスに持たせる情報を格納する変数。
クラスフィールドの定義の仕方
class Person {
public static <データ型> <変数名>;
}
※インスタンスフィールドと異なり、static
をつける
クラスフィールドへのアクセス方法
class Main {
public static void main(String[] args) {
System.out.println("合計" + Person.count + "人です");
Person person1 = new Person( ... );
System.out.println("合計" + Person.count + "人です");
}
}
class Person {
/* countという変数に人数という情報を格納していく */
public static int count = 0;
.........
Person(String firstName, ...) {
Person.count ++;
}
}
> 合計0人です
> 合計1人です
※インスタンス生成のたびにcount
に1ずつ足していっている
5.コンストラクタ
new
でインスタンスを生成後自動で呼び出されるメソッド。
定義方法が決まっているので注意
コンストラクタの定義方法
class Person {
public String name;
Person() {
/* インスタンス生成時行いたい処理 */
}
}
コンストラクタはPerson() {}
の部分。
メソッドの宣言と書き方が似ている。
しかしメソッドとは違い戻り値はないしvoidも不要。
なぜなら、コンストラクタの戻り値は必ずそのクラスのインスタンスであり、
明示しなくてもコンパイラはわかってくれる。
以下はコンパイラの実例。
インスタンス生成時に、インスタンスフィールドにセットしたい値をコンストラクタの引数に渡す
class Person {
public String name;
Person(String name) {
this.name = name;
}
}
コンストラクタの呼び出し方
Person person = new Person("Suzuki");
System.out.println(person.name);
6.まとめ
修飾子 | static | データ型 | メソッド名orフィールドの変数名 | メソッド名 | |
---|---|---|---|---|---|
インスタンスメソッド | public | - | データ型 | メソッド名 | |
インスタンスフィールド | public | - | データ型 | フィールドの変数名 | |
クラスメソッド | public | static | データ型 | メソッド名 | |
クラスフィールド | public | static | データ型 | フィールドの変数名 | |
コンストラクタ | public | - | データ型 | 変数名 | クラス名 |
混乱しやすいですね!
以上です!