注目記事

【Javaコード入門】修飾子_④static修飾子

静的メンバーを定義する – static修飾子

クラスのメンバーにstatic修飾子を付与すると、クラスをインスタンス化しなくてもアクセスできるようになります。具体的には「クラス名.メンバー名」の形式でアクセスできます。このようなメンバーのことを静的メンバー、またはそれぞれのメンバーに応じて静的フィールド静的メソッドと呼びます。
たとえば以下は、静的メンバーとしてhogeフィールド、foobarメソッドを定義し、呼び出しています。

ModStatic.java

  1. package com.example.mynavi.modifier;
  2.  
  3. public class ModStatic {
  4.   static String hoge = "静的フィールド";
  5.   static void foobar() {
  6.   System.out.println("静的メソッド");
  7.   }
  8.  
  9. public static void main(String[​] args) {
  10.   System.out.println(ModStatic.hoge); // 結果:静的フィールド
  11.   ModStatic.foobar(); // 結果:静的メソッド
  12.   }
  13.   }

hoge、foobarからstatic修飾子を取り除いた場合、太字の部分は、以下のように書かなければなりません。

  1. var ms = new ModStatic(); // インスタンス化が必須
  2. System.out.println(ms.hoge);
  3. ms.foobar();

静的メンバーを利用する場合の注意点を、以下にまとめておきます。

(1)静的メソッドからthisにはアクセスできない

静的メソッドでは、いわゆるインスタンスはありませんので、当然、インスタンスを示すthisにもアクセスできません。

(2)静的フィールドの利用は限定的に

静的フィールドは、インスタンスフィールドとは違って、内容を変更した場合にもすべてのインスタンスに影響してしまいます(いわゆるグローバルな変数です)。静的フィールドの濫用はそのままクラス間の依存が強くなり、結果、コードの可読性が困難になる場合もあります。
一般的には、静的フィールドは読み取り専用の用途で利用することをお勧めします。

修飾子_目次
修飾子
アクセス修飾子
abstract修飾子
static修飾子
final修飾子
sealed/non-sealed修飾子
transient修飾子
volatile修飾子
synchronized修飾子
native修飾子
strictfp修飾子

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。