宣言と同時に初期化 初期化とは? | Javaプログラマー資格試験(OCJ-P) WEB講座

Javaプログラマー資格試験(OCJ-P) WEB講座

Javaプログラマー資格(OCJ-P)を学習するブログです。

OCJ-P・Javaプログラマー資格をとりたい。
Javaプログラミングの入門者・初心者。

そんなあなたに、Javaプログラマー資格の取得に役立つ本質的な知識を、
分かりやすく解説していきます。

public class Sample {

 int i1;

 void test(){
  int i2;

  System.out.println(i1);
  System.out.println(i2);
 }

 public static void main(String[] args){
  Sample sample = new Sample();
  sample.test();
 }
}

実行結果はどうなると思いますか?
この問題が、初期化の大きなポイントです。
(答えは最後)

 まず、初期化とは1回目の代入をすること。です。
メモリ関連の話をすると、もう少し深くなるのでしょうが、
OCJ-Pではその程度の理解でも十分です。

覚えておくべきことは、初期化の意味ではなくて、
Javaでは『自動で初期化しといてくれる。』
ということ。

ただし!
言語規定 4.5.3 変数の種類  の中にある、
局所変数(メソッド内で宣言した変数。ローカル変数ともいう)はしてくれない。

局所変数は、自動で初期化してくれないので、
必ず自分で初期化する必要があるのです。

ですので、初期化していないまま、
その変数を参照しようとするコードを書くと、
コンパイルエラーが発生するわけです。

 つまり、問題の答えは、
System.out.println(i2);
の箇所でコンパイルエラーが発生する。
です。

一行上のSystem.out.println(i1);
では、0と表示されます。

これは、i1はメンバフィールドなので、
Java側で自動的に初期化してくれるから。

int 型の場合、0を自動的に代入してくれるんです。
何を代入しといてくれるかは、
言語規定の4.5.5 変数の初期値 を見て下さい。