カテゴリ: Java 更新日: 2026/03/27

Javaの変数とは?宣言・代入・スコープの基本をわかりやすく解説

Javaの変数とは?宣言・代入・スコープの基本をわかりやすく解説
Javaの変数とは?宣言・代入・スコープの基本をわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「Javaの変数って何ですか?プログラミングで必ず出てくる言葉ですが、いまいちピンときません。」

先生

「変数は、データを入れておく箱のようなものです。Javaでプログラムを書くときに、数値や文字列などのデータを一時的に保存しておく場所として使います。」

生徒

「箱ですか。でも、どうやって使うんですか?」

先生

「それでは、変数の宣言、代入、そしてスコープについて、順番に見ていきましょう!」

1. Javaの変数とは何か?

1. Javaの変数とは何か?
1. Javaの変数とは何か?

Javaにおける変数とは、プログラムの中で数値や文字などのデータを一時的に保存しておくための「入れ物(メモリ上の場所)」のことです。計算結果を覚えておいたり、ユーザーが入力した情報を後から使ったりするために欠かせない存在です。

たとえば、「年齢」「名前」「点数」など、途中で何度も使う値を毎回書くのは大変です。そこで変数に保存しておくことで、必要なときに同じ名前を指定するだけで、その値を簡単に取り出せるようになります。

変数には必ず名前(変数名)を付けます。この名前があることで、「どんなデータが入っているのか」を人間にもJavaにも分かりやすく伝えられます。またJavaは静的型付け言語のため、変数を使う前に「どんな種類のデータを入れるのか(データ型)」を決める必要があります。これにより、間違った使い方をコンパイル時に見つけやすくなり、初心者でも安心してプログラムを書けます。

まずは、変数を使ったとても簡単なサンプルを見てみましょう。


public class VariableSample {
    public static void main(String[] args) {
        // 年齢を保存する変数
        int age = 20;

        // 名前を保存する変数
        String name = "太郎";

        // 変数の中身を表示する
        System.out.println("名前: " + name);
        System.out.println("年齢: " + age);
    }
}

このプログラムでは、ageという変数に年齢、nameという変数に名前を保存しています。System.out.printlnで変数名を指定すると、その中に入っている値が画面に表示されます。このように、変数は「値を覚えておいて、あとで使うための仕組み」だと考えると理解しやすいでしょう。

2. 変数の宣言方法

2. 変数の宣言方法
2. 変数の宣言方法

Javaで変数を使うには、まず変数の宣言が必要です。変数の宣言とは、「この名前の変数を使います」とJavaに伝えることです。宣言する際には、データ型と変数名を指定します。

基本的な変数宣言の構文は次のようになります。

基本構文: データ型 変数名;

以下は、様々なデータ型での変数宣言の例です。


public class VariableDeclaration {
    public static void main(String[] args) {
        // 整数型の変数宣言
        int age;
        
        // 小数型の変数宣言
        double price;
        
        // 文字列型の変数宣言
        String name;
        
        // 真偽値型の変数宣言
        boolean isStudent;
        
        // 文字型の変数宣言
        char grade;
    }
}

このように、変数を宣言することで、メモリ上にデータを格納する場所が確保されます。ただし、この段階ではまだ値は入っていません。

3. 変数への代入と初期化

3. 変数への代入と初期化
3. 変数への代入と初期化

変数に値を入れることを「代入」と呼びます。代入には代入演算子である「=」を使用します。また、変数の宣言と同時に値を代入することを「初期化」と呼びます。

変数に値を代入する方法は2つあります。1つ目は宣言後に代入する方法、2つ目は宣言と同時に初期化する方法です。初期化する方が、コードが短く読みやすくなるため推奨されます。


public class VariableAssignment {
    public static void main(String[] args) {
        // 宣言後に代入
        int studentCount;
        studentCount = 30;
        
        // 宣言と同時に初期化(推奨)
        int classRoom = 5;
        double temperature = 25.5;
        String subject = "数学";
        boolean isOpen = true;
        
        // 変数の値を出力
        System.out.println("生徒数: " + studentCount);
        System.out.println("教室数: " + classRoom);
        System.out.println("気温: " + temperature + "度");
        System.out.println("科目: " + subject);
    }
}

実行結果は次のようになります。


生徒数: 30
教室数: 5
気温: 25.5度
科目: 数学

変数に一度代入した値は、後から別の値に変更することもできます。これを「再代入」と呼びます。

4. Javaの主なデータ型

4. Javaの主なデータ型
4. Javaの主なデータ型

Javaには様々なデータ型があり、保存したいデータの種類に応じて適切な型を選択する必要があります。データ型は大きく分けて、基本データ型(プリミティブ型)と参照データ型の2種類があります。

基本データ型には以下のようなものがあります。

  • int型: 整数を扱う型で、-2,147,483,648から2,147,483,647までの範囲の値を格納できます
  • double型: 小数を扱う型で、より精度の高い計算に使用されます
  • boolean型: 真偽値(trueまたはfalse)を扱う型です
  • char型: 単一の文字を扱う型で、シングルクォーテーションで囲みます
  • long型: より大きな整数を扱う型です
  • float型: 小数を扱う型で、doubleより精度は低いですがメモリ効率が良いです

参照データ型の代表例は、String型(文字列)、配列、クラス型などです。

5. 変数のスコープとは?

5. 変数のスコープとは?
5. 変数のスコープとは?

変数のスコープとは、変数が有効な範囲のことです。Javaでは、変数を宣言した場所によって、その変数を使える範囲が決まります。スコープを理解することは、バグを防ぎ、プログラムを正しく動作させるために非常に重要です。

Javaには主に3種類のスコープがあります。ローカル変数(メソッド内で宣言された変数)、インスタンス変数(クラス内でメソッドの外で宣言された変数)、クラス変数(staticキーワードを付けて宣言された変数)です。

最も基本的なローカル変数のスコープについて見ていきましょう。


public class VariableScope {
    public static void main(String[] args) {
        int outerNumber = 10;
        System.out.println("外側の変数: " + outerNumber);
        
        if (outerNumber > 5) {
            int innerNumber = 20;
            System.out.println("内側の変数: " + innerNumber);
            System.out.println("外側の変数も使える: " + outerNumber);
        }
        
        // ここではinnerNumberは使えない(スコープ外)
        // System.out.println(innerNumber); // エラーになる
        
        System.out.println("外側の変数は引き続き使える: " + outerNumber);
    }
}

このプログラムを実行すると、次のような結果が得られます。


外側の変数: 10
内側の変数: 20
外側の変数も使える: 10
外側の変数は引き続き使える: 10

if文の中で宣言された変数innerNumberは、if文のブロック内でのみ有効です。ブロックの外では使用できません。一方、outerNumberはメソッド全体で使用できます。

6. ローカル変数のスコープの詳細

6. ローカル変数のスコープの詳細
6. ローカル変数のスコープの詳細

ローカル変数は、メソッドやブロック内で宣言された変数で、そのメソッドやブロックが終了すると使えなくなります。これは、波括弧({ })で囲まれた範囲がスコープとなるためです。

ローカル変数の特徴として、自動的に初期化されないという点があります。つまり、使用する前に必ず値を代入する必要があります。初期化されていない変数を使おうとすると、コンパイルエラーが発生します。

forループの中で宣言された変数も、そのループ内でのみ有効です。


public class LoopScope {
    public static void main(String[] args) {
        // forループのスコープ
        for (int i = 0; i < 3; i++) {
            int loopVariable = i * 10;
            System.out.println("ループ内の変数: " + loopVariable);
        }
        
        // ここではiもloopVariableも使えない
        // System.out.println(i); // エラー
        
        // 別のループで同じ変数名を使える
        for (int i = 0; i < 2; i++) {
            System.out.println("別のループ: " + i);
        }
    }
}

このように、forループが終了すると、そのループ内で宣言された変数は使えなくなります。そのため、別のループで同じ変数名を再度使用することができます。

7. 変数の命名規則とベストプラクティス

7. 変数の命名規則とベストプラクティス
7. 変数の命名規則とベストプラクティス

Javaで変数名を付ける際には、いくつかのルールと推奨される慣習があります。まず、変数名は英字、数字、アンダースコア、ドル記号を使用できますが、数字で始めることはできません。

また、Javaのキーワード(予約語)を変数名として使用することはできません。例えば、int、class、public、staticなどは変数名にできません。

変数名の命名規則として、キャメルケース(camelCase)が推奨されています。最初の単語は小文字で始め、2番目以降の単語の最初の文字を大文字にします。変数名は、その変数が何を表しているのかが分かるように、意味のある名前を付けることが重要です。

良い変数名の例:

  • studentAge(生徒の年齢)
  • totalPrice(合計金額)
  • isFinished(完了したかどうか)
  • userName(ユーザー名)

避けるべき変数名の例:

  • a, b, c(意味が分からない)
  • data1, data2(具体性がない)
  • temp(一時的な変数以外では避ける)

8. 定数の宣言と使い方

8. 定数の宣言と使い方
8. 定数の宣言と使い方

Javaでは、一度設定したら変更されない値を定数として宣言することができます。定数を宣言するには、finalキーワードを使用します。定数名は、慣習的にすべて大文字で記述し、単語の区切りにアンダースコアを使用します。

定数を使用することで、プログラムの可読性が向上し、値の変更が必要な場合も一箇所を修正するだけで済みます。また、誤って値を変更してしまうことを防ぐことができます。


public class ConstantExample {
    public static void main(String[] args) {
        // 定数の宣言
        final int MAX_STUDENTS = 40;
        final double TAX_RATE = 0.10;
        final String SCHOOL_NAME = "サンプル学園";
        
        int currentStudents = 35;
        double itemPrice = 1000.0;
        
        // 定数を使った計算
        int availableSeats = MAX_STUDENTS - currentStudents;
        double totalPrice = itemPrice * (1 + TAX_RATE);
        
        System.out.println("学校名: " + SCHOOL_NAME);
        System.out.println("最大生徒数: " + MAX_STUDENTS);
        System.out.println("空席数: " + availableSeats);
        System.out.println("税込価格: " + totalPrice + "円");
        
        // 定数は再代入できない
        // MAX_STUDENTS = 50; // コンパイルエラー
    }
}

実行結果は以下のようになります。


学校名: サンプル学園
最大生徒数: 40
空席数: 5
税込価格: 1100.0円

定数には再代入できないため、プログラムの安全性が高まります。値が変わらないことが保証されている場合は、積極的に定数を使用しましょう。

9. 型変換とキャスト

9. 型変換とキャスト
9. 型変換とキャスト

Javaでは、異なるデータ型の変数間で値をやり取りする際に、型変換が必要になる場合があります。型変換には、自動的に行われる暗黙の型変換と、プログラマが明示的に指定する明示的な型変換(キャスト)の2種類があります。

暗黙の型変換は、小さい型から大きい型への変換で、データの損失がない場合に自動的に行われます。例えば、int型からdouble型への変換は自動的に行われます。

一方、大きい型から小さい型への変換や、小数を整数に変換する場合は、明示的なキャストが必要です。この場合、データの一部が失われる可能性があるため、注意が必要です。

注意: 明示的なキャストを行う際は、データの損失が発生する可能性があることを理解しておきましょう。

10. 変数を使った実践的なプログラム例

10. 変数を使った実践的なプログラム例
10. 変数を使った実践的なプログラム例

最後に、これまで学んだ変数の知識を活用して、実践的なプログラムを作成してみましょう。以下は、商品の価格計算を行うプログラムの例です。


public class PriceCalculator {
    public static void main(String[] args) {
        // 商品情報の変数宣言と初期化
        String productName = "ノートパソコン";
        int quantity = 3;
        double unitPrice = 85000.0;
        final double DISCOUNT_RATE = 0.15;
        final double TAX_RATE = 0.10;
        
        // 小計の計算
        double subtotal = unitPrice * quantity;
        
        // 割引額の計算
        double discountAmount = subtotal * DISCOUNT_RATE;
        
        // 割引後の価格
        double priceAfterDiscount = subtotal - discountAmount;
        
        // 税込価格の計算
        double finalPrice = priceAfterDiscount * (1 + TAX_RATE);
        
        // 結果の表示
        System.out.println("=== 購入明細 ===");
        System.out.println("商品名: " + productName);
        System.out.println("数量: " + quantity + "個");
        System.out.println("単価: " + unitPrice + "円");
        System.out.println("小計: " + subtotal + "円");
        System.out.println("割引額: " + discountAmount + "円");
        System.out.println("割引後: " + priceAfterDiscount + "円");
        System.out.println("最終価格(税込): " + finalPrice + "円");
    }
}

このプログラムでは、商品名、数量、単価などの変数を使って、割引や税込み価格を計算しています。変数を適切に使用することで、計算過程が明確になり、プログラムの可読性が向上します。

実行結果は次のようになります。


=== 購入明細 ===
商品名: ノートパソコン
数量: 3個
単価: 85000.0円
小計: 255000.0円
割引額: 38250.0円
割引後: 216750.0円
最終価格(税込): 238425.0円

このように、変数を効果的に使うことで、複雑な計算も分かりやすく記述することができます。変数名を適切に付けることで、プログラムの意図が明確になり、後から見直す際にも理解しやすくなります。

まとめ

まとめ
まとめ

Javaの変数は、プログラムの中でデータを扱うための最も基本となる仕組みです。変数を理解することは、Javaプログラミングの基礎を固めるうえで非常に重要であり、今後の学習の土台となります。本記事では、変数の定義から始まり、宣言方法、代入、初期化、データ型、スコープ、命名規則、定数、型変換、そして実践的なプログラム例までを段階的に解説しました。

まず、変数とはデータを一時的に保存するための箱のような存在であり、プログラムの中で数値や文字列、真偽値などを扱うために欠かせません。Javaは静的型付け言語であるため、変数を使う際には必ずデータ型を指定する必要があります。これにより、型の不一致によるエラーを未然に防ぐことができ、プログラムの安全性が向上します。

次に、変数の宣言と代入について理解することで、プログラム内でデータをどのように扱うかが明確になります。宣言だけでは値は入っておらず、代入や初期化によって初めて意味のあるデータとして利用できるようになります。特に宣言と同時に初期化を行うことで、コードの可読性が向上し、バグの発生を防ぐことにもつながります。

また、Javaのデータ型には基本データ型と参照型があり、それぞれ用途に応じて使い分ける必要があります。整数や小数、真偽値などの基本型は高速に処理できる一方で、文字列や配列などの参照型は柔軟なデータ操作を可能にします。適切な型を選択することは、効率的で読みやすいプログラムを書くための重要なポイントです。

さらに、変数のスコープを理解することで、どの範囲で変数が有効なのかを正しく把握できるようになります。ローカル変数はブロック内でのみ有効であり、スコープ外では使用できません。この仕組みを理解していないと、思わぬエラーの原因となるため注意が必要です。

命名規則についても重要です。意味のある変数名を付けることで、コードの可読性が大きく向上し、他の開発者や未来の自分にとって理解しやすいプログラムになります。キャメルケースを使い、変数の役割が一目で分かるような名前を付けることが推奨されます。

定数の利用も忘れてはいけません。変更されない値にはfinalキーワードを使って定数として定義することで、意図しない変更を防ぎ、保守性の高いコードを書くことができます。特に税率や最大値などの固定値には積極的に活用すると良いでしょう。

型変換については、自動で行われる暗黙の型変換と、明示的に行うキャストの違いを理解することが重要です。特にキャストではデータの損失が発生する可能性があるため、注意深く扱う必要があります。

最後に、実践的なプログラムを通して、これまで学んだ内容をどのように組み合わせて使うのかを確認しました。変数を適切に使うことで、複雑な処理でも整理された分かりやすいコードを書くことができます。

サンプルプログラムで振り返るJavaの変数


public class VariableSummaryExample {
    public static void main(String[] args) {

        // 変数の宣言と初期化
        String userName = "山田太郎";
        int age = 25;
        double height = 170.5;
        boolean isMember = true;

        // 定数
        final double TAX_RATE = 0.10;

        // 計算
        double price = 1000;
        double total = price * (1 + TAX_RATE);

        // 出力
        System.out.println("名前: " + userName);
        System.out.println("年齢: " + age);
        System.out.println("身長: " + height);
        System.out.println("会員かどうか: " + isMember);
        System.out.println("税込価格: " + total);
    }
}

名前: 山田太郎
年齢: 25
身長: 170.5
会員かどうか: true
税込価格: 1100.0
先生と生徒の振り返り会話

生徒

「変数って、ただの箱だと思っていましたが、データ型やスコープまで考える必要があるんですね。」

先生

「その通りです。変数は単なる箱ではなく、プログラム全体の設計に大きく関わる重要な要素です。」

生徒

「特にスコープの考え方は難しかったですが、使える範囲が決まっている理由が分かりました。」

先生

「スコープを理解すると、無駄なバグを防ぐことができますし、コードも整理されます。」

生徒

「変数名の付け方も大事なんですね。適当に付けていました。」

先生

「読みやすいコードを書くためには、意味のある名前を付けることがとても大切です。」

生徒

「定数や型変換も含めて、かなり理解が深まりました。」

先生

「良いですね。変数の基礎がしっかりしていれば、これからのオブジェクト指向やクラスの学習もスムーズに進められます。」

カテゴリの一覧へ
新着記事
New1
Quarkus
Quarkus拡張開発をマスター!ビルドプロセスの仕組みと内部構造を徹底解説
New2
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New3
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New4
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.5
Java&Spring記事人気No5
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.6
Java&Spring記事人気No6
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.7
Java&Spring記事人気No7
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?
No.8
Java&Spring記事人気No8
Quarkus
Quarkus拡張開発を徹底解説!仕組みから自作エクステンションの作り方まで