Java 定数: Java 定数の定義と分類


 
 
定数とは、プログラムの実行全体を通じて値が一定のままである量です。ここで注意すべきは、定数と定数値は異なる概念であり、定数値は定数の具体的かつ直感的な表現であり、定数は形式化された表現です。通常、定数値を直接使用することも、プログラム内で定数を使用することもできます。

 

Javaの定数値と定数の定義方法を体系的に見てみましょう。

定数値

定数値はリテラル定数とも呼ばれ、データによって直接表現されるため、整数や文字列など多くの種類のデータがあります。これらの定数値については以下で説明します。

整数の定数値

Javaの整数定数値には主に以下の3つの形式があります。

  • 10 進形式: 54、-67、0 など。
  • 8 進数形式: Java での 8 進定数の表現は 0 から始まります。たとえば、0125 は 10 進数の 85 を表し、-013 は 10 進数の -11 を表します。
  • 16 進数形式: Java での 16 進定数の表現は 0x または 0X で始まります。たとえば、0x100 は 10 進数の 256 を表し、-0x16 は 10 進数の -22 を表します。

整数(int)定数はデフォルトでメモリ上に32ビットを占有する整数型の値ですが、演算時に必要な値が32ビット長を超える場合には長整数(long)値として表現できます。長整数型では、697L のように数値の後に L または 1 を追加する必要があります。これはメモリ内の 64 ビットを占有する長整数を意味します。

実定数値

Javaの実定数値は主に以下の2つの形式があります。

  • 小数形式: 数値と小数点で構成され、12.34、-98.0 などの小数点が必要です。
  • 科学表記法: 1.75e5 や 32&E3 など。e または E の前に数値が必要で、e または E の後の数値は整数である必要があります。

Java の実定数は、デフォルトでメモリ内に 64 ビットを占有し、倍精度 (double) 値です。実行時のシステムリソースの節約を考慮し、演算時のデータ値の範囲が大きくなく、演算精度もそれほど高くない場合は、単精度(float)値で表現できます。

単精度値は通常、定数の後に F または f を追加する必要があります (69.7f など)。これは浮動小数点型の実数を意味し、メモリ内で 32 ビットを占有します (システムのバージョンによって異なります)。

ブール定数値

Java のブール定数には、false (偽) と true (真) の 2 つの値しかありません。

文字および文字列の定数値

Java の文字定数値は、「e」、「E」などの一重引用符で囲まれた文字です。 Java 文字列定数値では一重引用符と二重引用符を混在させることはできないことに注意してください。二重引用符は文字列を表すために使用されます。たとえば、「11」、「d」などはすべて単一の文字を表す文字列です。

上記の文字定数値に加えて、Java では、一般的な文字で表現することが難しい一部の文字を表すために、特殊な形式の文字定数値を使用することもできます。この特殊な形式の文字は、次のような一連の文字です。先頭はエスケープ文字と呼ばれます。

注: 文字および文字列を表す一重引用符および二重引用符は、英語入力環境で入力された記号である必要があります。

表 1 に、Java で一般的に使用されるエスケープ文字とその意味を示します。

表 1 Java で一般的に使用されるエスケープ文字
エスケープ文字 説明する
\ddd 1~3の8進数で表される文字
\uxxxx 1~4の16進数で表される文字
\’ 一重引用符文字
二重引用符文字
\\ ダブルスラッシュ文字
\r キャリッジリターン
\n 改行
\b バックスペース
\t 水平タブ

定数を定義する

定数は定数値とは異なり、プログラム内で定数値の代わりに記号として使用できるため、使用前に定義する必要があります。定数と変数 (「 Java 変数の宣言と初期化」セクションで説明) も初期化する必要があります。つまり、定数の宣言時に初期値を割り当てる必要があります。定数は初期化すると変更できません。その宣言形式は次のとおりです。

Java 言語では、final キーワードを使用して定数を定義します。その構文は次のとおりです。

final dataType variableName = value

このうち、finalは定数を定義するためのキーワード、dataTypeは定数のデータ型、variableNameは変数名、valueは初期値です。

Final キーワードは「最終」を意味し、多くの要素を変更でき、変更された変数は定数になります。たとえば、次のステートメントは、final キーワードを使用して定数を宣言します。

public class HelloWorld {
    // 静的定数
    public static final double PI = 3.14;
    // メンバー定数の宣言
    final int y = 10;

    public static void main(String[] args) {
        // ローカル定数の宣言
        final double x = 3.3;
    }
} 

定数には、静的定数、メンバー定数、ローカル定数の 3 種類があります。

コードの 3 行目は静的定数を宣言するもので、final の前に public static で修飾されます。 public staticで変更した定数のスコープはグローバルで、オブジェクトを作成せずにアクセス可能で、クラス外のアクセス形式はHelloWorld.PIです。この定数はプログラミングでよく使用されます。

コードの 5 行目では、メンバー定数を宣言しています。このメンバー定数の有効範囲はメンバー変数と同様ですが、変更することはできません。コードの 9 行目では、スコープがローカル変数のスコープと似ていますが、変更できないローカル定数を宣言しています。

定数を定義するときは、次の点に注意する必要があります。

  • 定数は定義時に初期化する必要があります。
  • Final キーワードは、基本データ型の定数を変更するためだけでなく、オブジェクト参照やメソッドを変更するためにも使用できます。
  • 変数と区別するために、定数には大文字で名前が付けられるのが一般的です。

定数を設定した後は、通常は変更できません。値を変更するとエラーが表示されます。例えば、下図のように定数 AGE を定義し、初期値を与えた場合、AGE の値を変更すると、コンパイル時に重複代入できない旨のエラーが表示されます。

 
 

「 Java 定数: Java 定数の定義と分類」についてわかりやすく解説!絶対に観るべきベスト2動画

属性とメンバ変数や操作とメソッドの違い、分かってますか?【Java入門講座】3-2 設計図クラス
【Javaをはじめよう!】第6回:クラスの定義(変数とメソッド)