今回はプログラミング初心者がよく混合する
クラスフィールド(クラス変数)とインスタンスフィールド(インスタンス変数)との違い。
クラスメソッドとインスタンスメソッドとの違いについて書き溜めます。
クラスフィールドとインスタンスフィールドの違い
クラスフィールド(クラス変数)は、クラス全体に共通する情報で、1インスタンスのみ状態に左右されない情報を格納する変数こと。
インスタンスフィールド(インスタンス変数)は、個々のインスタンスごとに、その属性、状態を格納する変数のこと。
クラスフィールドの特徴
Javaにおけるクラスフィールド(クラス変数)の特徴は下記である。
- 複数のクラスフィールドを宣言できる
- クラス全体を管理するための変数として利用できる
Javaでクラスフィールドを宣言する方法
Javaでクラスフィールドを宣言するには、「static修飾子」を利用する。
これをフィールドの型の前につけて宣言する。
1 |
static int myField = 10; |
クラスメソッドとインスタンスメソッドの違い
クラスメソッドは、インスタンスの属性、状態に依存しない処理を行うメソッドこと。
インスタンスメソッドは、上記のクラスメソッドを除いたインスタンスの属性や状態を利用して処理を行うメソッドのこと。
クラスメソッドの特徴
Javaにおけるクラスメソッドの特徴は下記である。
- クラスメソッド内では、特定のインスタンスを指す「this」は使用できない
- クラスメソッド内で、親クラスを呼び出す「super」は使用できない
- クラスフィールドを用いて処理をするものに関してはクラスメソッドを使用するのがよい
Javaでクラスメソッドを宣言する方法
Javaでクラスメソッドを宣言するには、「static修飾子」を利用する。
これをメソッドの型の前につけて宣言する。
1 2 3 |
static int myMethod(){ return 0; } |
クラスのメンバーにstatic修飾子を付与すると、
クラスをインスタンス化しなくてもアクセスできるようになります。
Javaでクラスメソッドを呼び出す方法
クラスメソッドはクラス名.メソッド名()で呼び出せる。
1 |
MyClass.myMethod(); |
staticとfinalについて
javaでクラスフィールド、クラスメソッドを宣言する際に利用される修飾子だが
「final」も同様に使用されるため下記に違いをまとめておく。
- static: クラスに属することを表す
- final: 変更不可であることを表す
- finalなフィールドは定数である
- finalなフィールド名は、大文字を使用するのがJavaの慣習
- finalなメソッドは、継承したクラス内でオーバーライドできない
クラス変数、インスタンス変数については、
はじめのときはよく混ざってしまうので
しっかり基礎を抑えておきたい。
じゃあね〜〜〜〜。