Javaのstaticを1から学ぶ!staticメソッド・フィールドの正しい使い方。

Javaのstaticを1から学ぶ!staticメソッド・フィールドの正しい使い方。

この記事では、Javaのstaticの意味とその使い方について説明していく。

staticは使いこなせば便利な存在でプログラムをシンプルに保つことができる反面、使うべきでない場面で使用すると困ることになる場合も多い。正しい使い分けを学んで、ここぞという場面で使用できるようになろう。

Javaのstaticとは?

まずはstaticとは何を意味するのか確認していこう。

「static」は日本語で言うと「静的」という意味で、「動的(dynamic)」の反対語にあたる。

しかし、Javaにおけるstaticを理解する際は「静的」という意味は忘れたほうがいいだろう。

Javaにおけるstaticは「クラスのインスタンスを生成しなくても、使用できるメソッドやフィールドのこと。」と考えるのがもっとも分かりやすいだろう。

今はしっくりこない人もいると思うが、サンプルコードを見ながらじっくりと解説するので安心してほしい。

「静的」と「動的」の違い

「静的・動的」という言葉は最近よく使われる言葉だが、間違えた意味で使用されることも多いので意味を確認しておきたい。

プログラミングの世界における「静的・動的」の定義は以下のようになる。

  • 静的(static) 処理を加えずに出力されるデータ。
    (例)「ようこそ!」といったテキストや写真などを処理を加えずにそのまま表示する。
  • 動的(dynamic) 何らかのプロセスを得たのちに出力されるデータ。
    (例)データベースから顧客の誕生日を抽出して、現在の年齢に換算してから表示する。

static修飾子の使い方

static修飾子の使い方を以下のサンプルコードを参考に見ていこう。

import java.util.Arrays;

class StaticClass {

    static {
        System.out.println("staticイニシャライザからのメッセージ");
    }

    private static int[] numberList = {25,32,1};

    public static class NestedStaticClass {
        public void printNumbers() {
            Arrays.stream(numberList).forEach(System.out::println);
        }
    }
}

class Main {

    public static void main(String args[]){
        StaticClass.NestedStaticClass printer = new StaticClass.NestedStaticClass();
        printer.printNumbers();
    }
}

―シングルトーン

staticとアクセス修飾子

staticとfinal修飾子

staticフィールド

インスタンスメソッドからstaticフィールドにアクセスすることは出来ない。

staticメソッド

プロジェクト内で繰り返し使用されるメソッドはstaticメソッドとして

逆にクラスの役割などに大きく依存するメソッドはインスタンスメソッドとしておいた方がいいだろう。

staticの応用的な使い方

あまりソースコード内で見かけることは少ないが、便利な使い方をできるので覚えておくといいだろう!

staticクラス

Javaではクラスをstaticとして指定することは通常できないが、インナークラス(クラス内のクラス)をstaticとして指定することは可能だ。

static

staticイニシャライザ

staticイニシャライザ(static initializeation block)はmainメソッドよりも先に呼ばれる。

ひとつのクラスに複数のstaticイニシャライザを指定することもできる。その場合は上から順に実行される。