Java 入門

Java 変数の宣言と初期化

1. 変数の宣言を理解する

変数の宣言とは、本質的に「メモリ(Memory)内でデータに名前を付け、保存スペースを割り当てる」プロセスです。同時に、そのスペースにどのような種類のデータを格納できるか(データ型)を指定します。Java では、変数を使用する前に必ず宣言を行わなければなりません。これは、棚に物を置く前に、あらかじめ空きスペースを確保し、ラベルを貼っておく作業に似ています。宣言を行うことで、コンパイラ(Compiler)に変数の名前と格納するデータ型を伝えます。

Java における変数宣言の一般的な構文(Syntax)は以下の通りです:

dataType variableName;
  • dataType(データ型): その変数が格納するデータの種類を指定します。代表的なものとして、int(整数)、double(浮点数)、boolean(真偽値)、String(文字列)などがあります。
  • variableName(変数名): 変数に付ける名前です。変数名は説明的である必要があり、特定の命名規則(Naming Convention)に従う必要があります。

コード例:

int age;           // 'age' という名前の整数(int)型変数を宣言
double price;      // 'price' という名前の倍精度浮点数(double)型変数を宣言
boolean isStudent; // 'isStudent' という名前のブーリアン(boolean)型変数を宣言
String name;       // 'name' という名前の文字列(String)型変数を宣言

1.1 変数の命名規則

意味があり、一貫性のある変数名を選択することは、コードの可読性(Readability)と保守性(Maintainability)において極めて重要です。Java には、変数命名に関する厳格なルールと慣習があります。

  • 英文字、アンダーバー (_)、またはドル記号 ($) で始まる必要がある: 技術的にはドル記号も使用可能ですが、標準的な変数名では通常避けられます。
  • 数字で始めてはいけない: 例えば int 1stPlace; は無効な宣言であり、エラーになります。
  • 英文字、数字、アンダーバー、ドル記号を含めることができる: 最初の文字以降は、これらの文字を自由に組み合わせることができます。
  • 大文字と小文字を厳密に区別する: ageAge は、Java では全く別の変数として扱われます。
  • Java のキーワード(予約語)は使用できない: classintpublic など、システムが予約している単語を変数名にすることはできません。
  • キャメルケース (lowerCamelCase) を使用する: これは最も一般的で、推奨される業界標準です。最初の単語の頭文字は小文字にし、続く単語の頭文字を大文字にします(例:firstNamestudentAgetotalAmount)。

有効な変数名の例:

int studentAge;
double itemPrice;
String userName;
boolean isValidInput;
int _count;  // 有効ですが、あまり一般的ではありません
int $amount; // 有効ですが、通常は避けるべきです

無効な変数名の例:

int 1stPlace;   // 無効:数字で始まっている
int my-age;     // 無効:ハイフン(マイナス記号)が含まれている
int class;      // 無効:'class' は Java のキーワード

1.2 複数の変数を一度に宣言する

同じデータ型の変数であれば、カンマで区切ることで一行で複数宣言できます。

int x, y, z;    // 3つの整数型変数 x, y, z を宣言
double a, b, c; // 3つの倍精度浮点数型変数 a, b, c を宣言

この書き方は許容されていますが、可読性を高めるために(特に初期化を伴う場合)、通常は一行につき一つの変数を宣言することが推奨されます。

2. 変数の初期化 (Variable Initialization) を理解する

変数の初期化とは、変数を宣言した後に、初めて初期値を代入するプロセスを指します。初期化を行わない場合、変数はそのデータ型に応じたデフォルト値(Default Value)を保持します(例:int0double0.0booleanfalseString などの参照型は null)。

しかし、これらのデフォルト値に依存するのは悪いプログラミング習慣です。明示的に変数を初期化することで、コードの挙動が予測可能になり、理解しやすくなります。

初期化の構文は以下の通りです:

variableName = value;
  • variableName: 以前に宣言した変数名。
  • =: 代入演算子(Assignment Operator)。右側の値を左側の変数に代入する役割を持ちます。
  • value: 変数に代入したい初期値。この値は宣言時のデータ型と一致している必要があります。

コード例:

int age;
age = 25;         // 変数 'age' に 25 を代入

double price;
price = 19.99;    // 変数 'price' に 19.99 を代入

boolean isStudent;
isStudent = true; // 変数 'isStudent' に true を代入

String name;
name = "Alice";   // 変数 'name' に "Alice" を代入

2.1 宣言と初期化を同時に行う(一括設定)

宣言と初期化を一行の簡潔なステートメント(Statement)にまとめることができます。

dataType variableName = value;

これは日常的な開発で最も頻繁に使用され、推奨される書き方です。コードがよりコンパクトになります。

コード例:

int age = 25;
double price = 19.99;
boolean isStudent = true;
String name = "Alice";

2.2 式(Expression)を使用した初期化

数学的な演算や論理演算の結果(式)を使用して変数を初期化することもできます。その式の最終的な計算結果がデータ型と互換性があれば問題ありません。

コード例:

int x = 10;
int y = x + 5;       // 式の結果 15 (10 + 5) を 'y' に代入
double radius = 5.0;
double area = 3.14159 * radius * radius; // 円の面積の公式で 'area' を初期化

3. 初期化の重要性

変数を使用する前に初期化を忘れることは、プログラムのエラーを引き起こす主要な原因の一つです。Java コンパイラは非常に厳格です。ローカル変数(メソッドの内部で宣言された変数)は、使用される前に必ず初期化されていなければなりません。そうでない場合、コンパイルエラーが発生します。

public class Example {
    public static void main(String[] args) {
        int number; // 変数は宣言されているが、未初期化
        
        // System.out.println(number); // この行のコメントを外すとコンパイルエラーが発生する
        
        number = 10; // ここで初期化
        System.out.println(number); // これで正しく実行され、10 が出力される

この例では、コメントアウトされた行はコンパイルエラーを引き起こします。number に具体的な数値が代入される前にプリントしようとしたためです。使用前に値を代入することで、この問題は解決します。

4. ベストプラクティスのまとめ

  • 宣言時に即座に初期化する: 変数の宣言と同時に初期値を代入する習慣をつけましょう。これにより多くの初歩的なミスを防げます。
  • 意味のある変数名を使用する: その変数の用途を正確に反映した名前にします(例:ts ではなく totalScore)。
  • 命名規則を厳守する: キャメルケース (lowerCamelCase) を一貫して使用することで、コードがプロフェッショナルに見え、チーム開発も円滑になります。
  • 不要な変数を避ける: コード内で全く使用しない変数は宣言しないでください。
  • 変数のスコープを最小限にする: 変数は可能な限り、それを必要とする最小の範囲(例:特定の for ループ内など)で宣言するようにします。これについては後の「スコープ (Scope)」のセクションで詳しく学びます。