这段代码是如何正常工作并打印9的?
public class Dog{
static {
age=9;
}
static int age=7;
}这段代码不编译(非法的前向引用)?注意,我在静态块中更改了年龄。
public class Dog{
static {
age++;
}
static int age=7;
}另一个问题是他们俩是怎么工作的?根据我以前的Java知识,我知道一条规则:
在声明变量之前不能访问它们
。那么静态块如何知道年龄的变量实际上是什么呢?
发布于 2020-05-12 09:47:09
public class Dog{
static {
age=9;
}
static int age=7;
}静态块和静态变量初始化按照它们在源文件中出现的顺序执行。(java文档点9
接下来,按照文本顺序执行类的类变量初始化器和静态初始化器,或接口的字段初始化器,就像它们是单个块一样。
在上述情况下,在声明java在某些情况下允许的变量之前,您正在进行赋值。字段初始化期间的前向引用
使用在作业的左边;
public class Dog {
static {
age++;
}
static int age=7;
}在本例中,您是在声明不允许的内容之前阅读它。这就是为什么你会得到一个非法的前向引用异常。
J= 200;// ok -分配 J=j+ 1;//错误-右手边在声明前读取
https://stackoverflow.com/questions/61743510
复制相似问题