首先看下面代码public class Test{
static {
b = 9;//【1】 不报错
int i = b;//【2】 报错
int j = b = 9;//【3】 不报错
System.out.println(b+"------------");//【4】 报错
}
static int a = 1;
static int b;
static int c = 1;
public static void main(String[] args){
System.out.println("a="+a+":b="+b+":c="+c);
}
}静态块【1】 b = 9 用到静态变量b是没问题的。
静态块【2】 把b赋给i int i = b 报错了
静态块【3】 int j = b = 9; 没问题
静态块【4】 输出b报错了望高人指教
static {
b = 9;//【1】 不报错
int i = b;//【2】 报错
int j = b = 9;//【3】 不报错
System.out.println(b+"------------");//【4】 报错
}
static int a = 1;
static int b;
static int c = 1;
public static void main(String[] args){
System.out.println("a="+a+":b="+b+":c="+c);
}
}静态块【1】 b = 9 用到静态变量b是没问题的。
静态块【2】 把b赋给i int i = b 报错了
静态块【3】 int j = b = 9; 没问题
静态块【4】 输出b报错了望高人指教
static int a = 1;
static int b;
static int c = 1;
static {
b = 9;//【1】 不报错
int i = b;//【2】 报错
int j = b = 9;//【3】 不报错
System.out.println(b+"------------");//【4】 报错
}
public static void main(String[] args){
System.out.println("a="+a+":b="+b+":c="+c);
}
}
static int a = 1;
static int b;
static int c = 1;
static {
b = 9;//【1】 不报错
int i = b;//【2】 报错
int j = b = 9;//【3】 不报错
System.out.println(b+"------------");//【4】 不会再报错
}
public static void main(String[] args){
System.out.println("a="+a+":b="+b+":c="+c);
}
}
至于int j=b=9这个实际上拿来使用的不是变量b而是9这个实际存在的整数常量
b = 9
int j = b = 9;
这两句都是初始化语句 static int b; 放在静态域 前面 或者后面都是可以的。但是,在静态域里面,要是访问里面的变量就得考虑非法向前引用的问题了
int i = b;
System.out.println(b+"------------");
这两句都是要访问b里面的数据
在这种情况下, static int b; 就必须放在静态域的前面了
这个可能会在jdk未给b划分内存区域时操作,所以会报错