staticはクラスフィールドやクラスメソッドであるという宣言である。
staticとは
■staticをつけている
生成したインスタンスがフィールドやメソッドを実体として所持するのではなく、
クラスフィールドとクラスメソッドの情報を参照するのみとなるイメージ。
つまり、ポインタ的な感じで、インスタンスAがクラス変数を変更すると、
同じクラスを参照するインスタンスBでも変更が反映される。
従って、インスタンスに変更されたクラスの状態を覚えておきたいという時に活用できる。
ClassX classA = new ClassX();
ClassX classB = new ClassX();
classA.changeParam1(); //パラメータ1を変更する関数を呼び出す。
classB.getParam1(); //classAによって変更された内容が反映されている。
ただし、上記の通り他のインスタンスに状態を変えることが可能だと状態が追いづらくなることから、
他クラスからも参照可能なpublic staticメソッドの利用は控えた方が無難。
private staticメソッドはクラスメソッドがインスタンス変数を変更できない特性から比較的安全。
private final staticまですると、常に不変にできるのでより安全。
■staticをつけていない
インスタンスがフィールドやメソッドを実体として所持しているイメージ。
呼び出しの関係
staticメソッドとクラスメソッドが各変数を参照できるかについて
メソッド/変数 |
static変数 |
インスタンス変数 |
staticメソッド |
インスタンスメソッド |
staticメソッドから参照する |
○ |
×(※1) |
○ |
×(※1) |
インスタンスメソッドから参照する |
○ |
○(※2) |
○ |
○(※2) |
(※1)
staticをつけたメソッドはクラス固有のメソッドとなるため、
そのクラスを元に生成したインスタンスからのメソッド呼び出しはできず、
クラス名 インスタンス名 = new クラス名();
インスタンス名.メソッド名();
で呼び出す必要がある。
(※2)
staticなのでインスタンスに依存せず呼び出せる。
最終更新:2021年07月12日 19:59