静的メンバーを定義する – static修飾子
クラスのメンバーにstatic修飾子を付与すると、クラスをインスタンス化しなくてもアクセスできるようになります。具体的には「クラス名.メンバー名」の形式でアクセスできます。このようなメンバーのことを静的メンバー、またはそれぞれのメンバーに応じて静的フィールド、静的メソッドと呼びます。
たとえば以下は、静的メンバーとしてhogeフィールド、foobarメソッドを定義し、呼び出しています。
ModStatic.java
- package com.example.mynavi.modifier;
- public class ModStatic {
- static String hoge = "静的フィールド";
- static void foobar() {
- System.out.println("静的メソッド");
- }
- public static void main(String[] args) {
- System.out.println(ModStatic.hoge); // 結果:静的フィールド
- ModStatic.foobar(); // 結果:静的メソッド
- }
- }
hoge、foobarからstatic修飾子を取り除いた場合、太字の部分は、以下のように書かなければなりません。
- var ms = new ModStatic(); // インスタンス化が必須
- System.out.println(ms.hoge);
- ms.foobar();
静的メンバーを利用する場合の注意点を、以下にまとめておきます。
(1)静的メソッドからthisにはアクセスできない
静的メソッドでは、いわゆるインスタンスはありませんので、当然、インスタンスを示すthisにもアクセスできません。
(2)静的フィールドの利用は限定的に
静的フィールドは、インスタンスフィールドとは違って、内容を変更した場合にもすべてのインスタンスに影響してしまいます(いわゆるグローバルな変数です)。静的フィールドの濫用はそのままクラス間の依存が強くなり、結果、コードの可読性が困難になる場合もあります。
一般的には、静的フィールドは読み取り専用の用途で利用することをお勧めします。