トップ 言語 Java アクセス修飾子、スコープ、定数 javaプログラムの定数の定義

javaプログラムの定数の定義―static final、定数クラス、enum理解の基礎知識

static final、定数クラス、enum理解の基礎知識。Javaプログラムの定数の定義についてまとめています。

▲記事トップへ

Javaプログラムの定数

Javaプログラムでは、あらかじめ決められた値を名前で定義することができます。これが定数です。

定数は、変数のように値を変化させることができません。また、定数を使用する場合にも宣言が必要です。

なぜ定数が必要か?―マジックナンバーの置き換え

ソースコード中に具体的な値(マジックナンバー)を埋め込むとメンテナンスがしにくくなるので、 将来を考えない、よくないコーディングスタイルです。

例えば、プログラムに「ここで入力できる文字数は64文字以下じゃないと後のDBの処理の制限でエラーになる」という制限があります。 このとき、文字列の長さの限界となっている64という数字を、条件判断を行う部分に直接書いてしまうとダメです。 64はマジックナンバーです。

なぜマジックナンバーがダメか、理由をまとめてみます。

前置きが長くなりましたが、以下でJavaの定数について見ていきます。 まずは、static finalを使用した定数の定義方法を覚えて、定数クラス、必要に応じてenumを使用した定数クラスが使えるようにというような構成にしています。

Javaの定数の定義方法

定数を定義するときには、データ型の前に「static final」を指定します。

<アクセス修飾子> static final 型名 定数名 = 値;

キーワードstaticの次にfinalのキーワード、データ型、定数の名前、値を記述します。

定数を使用したプログラムの例

定数の宣言と値の格納の例を以下に示します。

public class Sample {
    //定数の宣言
    static final int INT = 1234;
    static final char CHAR = 'C';
    static final boolean BOOL = true;

    public static void main(String[] args) {
        System.out.println(INT);
        System.out.println(CHAR);
        System.out.println(BOOL);
    }
}

コンパイルと実行例

以下はコンパイルと実行の例です。

javac Sample.java
java Sample
1234
C
true

Javaの定数クラス

上述の定数(タイプコード)を一定の系統にまとめたクラスにすれば定数クラスができ上がります。 例えば、以下のようにColorsクラスを作成すれば定数クラスになります。

public final class Colors {
	public static final int RED = 1;
	public static final int BLUE = 2;
	public static final int GREEN = 3;
}

このようにColorsクラスに色関連のタイプコードを定数クラスとしてまとめます。 使う場合は、Colors.定数名というようにして使います。

public class Sample {

    public static void main(String[] args) {
        System.out.println(Colors.RED);
        System.out.println(Colors.BLUE);
        System.out.println(Colors.GREEN);
    }
}

static finalを使用した定数クラスの問題点とenumを使用した定数クラスの活用

上述のようなstatic finalを使用した定数クラスは、Javaの開発現場でたまに見かけることがあります。 コードが整理されたり、システムの仕様を定義している値など把握しやすくいいのですが、だんだん問題点がでてきます。

static finalを使用した定数クラスの問題点

冒頭のマジックナンバーの話より、定数が使用されないよりはいいのですが、 static finalを使用した定数クラスには問題点があります。

たとえば、上述のColorsクラスのように色の値を事前に決めておくのですが、この定数はあくまでもint型の値です。 それらの値を引数にとるメソッドでは引数の型をintとして宣言することになったりします。 実行時に1、2、3以外の値や意図と異なる値が渡される可能性があり、「タイプセーフでない」状態となってしまいます。 それを回避するためには、専用のクラスなどをつくる必要がありますが、予想外のnullポインタ例外など不具合の作り込みの要因も増えます。

つまり問題点をまとめると以下のような「型チェックが作用しない」、「タイプセーフではない」原因があります。

enumを使用した定数クラスの活用

このような課題を解決するために用意された機能として、Javaにはenumがあります。 長くなりますので、別のページにまとめています。 参考にしていただければと思います。

もっと知識を広げるための参考

もっと知識を広げるための参考です。

Javaのstatic修飾子

static変数、staticメソッド、staticイニシャライザ、staticインポートなど。Javaのstatic修飾子についてまとめています。

詳細

Javaのfinal修飾子

クラス、メソッド、変数、引数での使い方など。Javaのfinal修飾子についてまとめています。

詳細

Java言語

Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。

詳細

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

3.145.91.111

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク