Java staticについて

Java の static についてご紹介します。

staticは静的なため、インスタンス化しなくとも使用することが出来ます。ソースコードを使用して実際の挙動を見てみます。

static の フィールド、メソッド と、static でない フィールド、メソッド を作成します。

package com.example.demo;

public class TestClass {

  public String        testField;
  public static String staticTestField;

  public void testMethod() {
    System.out.println("Hello staticTestMethod()");
  }

  public static void staticTestMethod() {
    System.out.println("Hello staticTestMethod()");
  }
}

これをインスタンス化(new)せずに、それぞれ呼び出してみます。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SomeTestApplication {

  public static void main(String[] args) {
    SpringApplication.run(SomeTestApplication.class, args);

    // static
    String staticTestField = TestClass.staticTestField;
    TestClass.staticTestMethod();

    // non static
    String testField = TestClass.testField; // エラーになります
    TestClass.testMethod(); // エラーになります

    // non static
    TestClass testClass = TestClass(); // エラーになります
  }
}

staticでないものはエラーになりました。

最後はクラスも呼び出してみましたが、staticではないのでやはりエラーになりました。staticフィールドやメソッドを持っていても Class は static にはなりません。abstract と違うことを認識しておきましょう。