感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

使っているJDKのバージョンを取得するサンプル

スポンサーリンク

Spring Frameworkのソースを読んでいて勉強になったので、抜粋して使ってみる。
「org.springframweork.core」パッケージの、JdkVersionクラス。

Authorは俺の中で教科書の太字的な人物であるRad Johnson様。

JavaのバージョンをSystem.getProperty("java.version")を使って取得して、返すクラス。

package kiso;

public class JdkVersion {
    public static final int JAVA_14 = 0;
    public static final int JAVA_15 = 1;
    public static final int JAVA_16 = 2;
    public static final int JAVA_17 = 3;
    public static final int JAVA_18 = 4;
    public static final int JAVA_19 = 5;
    
    private static final String javaVersion;
    private static final int majorJavaVersion;
    static {
        javaVersion = System.getProperty("java.version");
        if (javaVersion.contains("1.9.")) {
            majorJavaVersion = JAVA_19;
        } else if (javaVersion.contains("1.8.")) {
            majorJavaVersion = JAVA_18;
        } else if (javaVersion.contains("1.7.")) {
            majorJavaVersion = JAVA_17;
        } else {
            majorJavaVersion = JAVA_16;
        }
    }
    
    public static String getJavaVersion() {
        return javaVersion;
    }
    
    public static int getMajorJavaVersion() {
        return majorJavaVersion;
    }
}

実際に使ってみると・・・

package samples;

import kiso.JdkVersion;

public class Main {
    public static void main(String[] args) {
        int majorVersion = JdkVersion.getMajorJavaVersion();
        String javaVersion = JdkVersion.getJavaVersion();
        
        System.out.println("Javaのバージョンは:" + javaVersion);
        
        if (majorVersion == JdkVersion.JAVA_16) {
            System.out.println("Javaのメジャーバージョンは1.6");
        } else if (majorVersion == JdkVersion.JAVA_17) {
            System.out.println("Javaのメジャーバージョンは1.7");
        } else if (majorVersion == JdkVersion.JAVA_18) {
            System.out.println("Javaのメジャーバージョンは1.8");
        } else if (majorVersion == JdkVersion.JAVA_19) {
            System.out.println("Javaのメジャーバージョンは1.9");
        }
        
    }
}

このmainの実行結果は、

Javaのバージョンは:1.6.0_31
Javaのメジャーバージョンは1.6

となって、Javaのバージョンを取得することができた。

もうちょっと深堀りする

上のJdkVersionで

static {
	//処理
}

みたいな部分があったが、これはstaticイニシャライザという。
staticイニシャライザはクラスのロード時に実行されるため、、クラスが初期化される前、またはmain()メソッドが呼び出される前であっても、何かしらの処理を行うことができる。

staticイニシャライザは

  • コンストラクタの実行前に実行される
  • つまり、クラスのロード時に1回実行される
  • staticイニシャライザは複数定義できて、複数ある場合は出現した順番に実現される