クラス変数の場合・・・変数宣言時に自分で値を代入しなければ自動的にdefault valueが代入されてbooleanならfalse、intなら0などになる。

一方、
ローカル変数(メソッド内や{}で挟まれたブロック内で宣言する変数)の場合・・・変数宣言時に自分で値を代入せず、その変数を使おうとするとコンパイルエラーになる。

つまり、


public class Sample {
static int a;
public static void main(String args[]){
System.out.println(a);
}
}
では、変数「a」はクラス変数だからdefault valueが代入されて実行すると「0」が出力されるけど、

public class Sample {
public static void main(String args[]){
int a;
System.out.println(a);
}
}
では、変数「a」はローカル変数だからコンパイルエラーになる。