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 変数の初期値 を見て下さい。