Developer

【はじめてのJava】ローカル変数の初期値【オブジェクトとクラス編】
2021.10.31
Lv1

【はじめてのJava】ローカル変数の初期値【オブジェクトとクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


オブジェクトとクラス編

オブジェクトとクラス編では、Javaを扱う上で非常によく出てくる「オブジェクト」や「クラス」について扱っていきます。

前回は「ローカル変数」について扱いました。

今回は「ローカル変数の初期値」について紹介します。


目次


変数の初期値

Javaの場合、変数には値が入っていないと使用することができません。

これまで扱った、「インスタンス変数」や「static変数」の場合は、宣言時に初期値を代入しない場合、自動的に決まった初期値が設定されていました。

例えばインスタンス変数の初期値は以下のようになります。

では、ローカル変数の場合はどうなるのでしょうか。


ローカル変数の初期値

Javaのローカル変数は、初期値が決まっていません。そのため、値が代入されるまではローカル変数を演算などの処理で利用することができません

インスタンス変数、static変数と比較する形で具体例を見てみましょう。


インスタンス変数の場合

インスタンス変数の場合、インスタンス化の際に初期化されます。

以下のプログラムでは、new Sample();が実行された際にnumが初期化されます。

Sampleクラス

class Sample{
  int num; //numをインスタンス変数として宣言

  public static void main(String[] args){
    Sample s = new Sample(); //Sampleクラスをインスタンス化。この時、自動的にs.numが初期化される。
    System.out.println("s.num : " + s.num); //s.numは自動的に初期化されているため実行可能
  }

}

static変数の場合

static変数の場合は、通常、クラスが読み込まれた際に初期化されます。

以下のプログラムでは、Sample.classが初めて読み込まれた時点でnumが初期化されます。

Sampleクラス

class Sample{
  static int num; //numをstatic変数として宣言。クラスの読み込み時にnumは自動的に初期化される。

  public static void main(String[] args){
    System.out.println("num : " + num); //numが自動的に初期化されているため実行可能
  }

}

ローカル変数の場合

ローカル変数の場合は、 明示的に初期化を行わない限り値が不明 です。

そのためJavaでは、 初期値不明の状態のローカル変数は処理に利用できません 

以下の例では、ローカル変数の初期化がされないまま表示処理で利用しようとしているため、コンパイルエラーとなります。

Sampleクラス

class Sample{

  public static void main(String[] args){
    int num;
    System.out.println("num : " + num); //numの値が不明なのでコンパイルエラーになる
  }

}

これをコンパイル可能な形にする場合は、以下のように書きます。

パターン1:宣言と同時に初期化

class Sample{

  public static void main(String[] args){
    int num = 0; //宣言時に同時に初期化する
    System.out.println("num : " + num); //実行可能
  }

}

パターン2:宣言後~利用する前の間で初期化

class Sample{

  public static void main(String[] args){
    int num;
    num = 0; //ローカル変数の宣言後、最初に使用する前に初期化する
    System.out.println("num : " + num); //実行可能
  }

}


まとめ

ローカル変数は初期化しないと値が不明
値が不明なローカル変数を処理で利用しようとするとコンパイルエラーとなる

次回

次回もローカル変数について扱います。


はじめてのJavaシリーズの目次はこちら
オブジェクトとクラス編はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら