首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明变量解释之前声明静态初始化程序块

声明变量解释之前声明静态初始化程序块
EN

Stack Overflow用户
提问于 2020-05-12 03:50:51
回答 1查看 61关注 0票数 0

这段代码是如何正常工作并打印9的?

代码语言:javascript
复制
public class Dog{

    static {
        age=9;
    }

    static int age=7;

}

这段代码不编译(非法的前向引用)?注意,我在静态块中更改了年龄。

代码语言:javascript
复制
public class Dog{

    static {
        age++;
    }

    static int age=7;

}

另一个问题是他们俩是怎么工作的?根据我以前的Java知识,我知道一条规则:

在声明变量之前不能访问它们

。那么静态块如何知道年龄的变量实际上是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 09:47:09

代码语言:javascript
复制
public class Dog{

   static {
      age=9;
   }

   static int age=7;
}

静态块和静态变量初始化按照它们在源文件中出现的顺序执行。(java文档点9

接下来,按照文本顺序执行类的类变量初始化器和静态初始化器,或接口的字段初始化器,就像它们是单个块一样。

在上述情况下,在声明java在某些情况下允许的变量之前,您正在进行赋值。字段初始化期间的前向引用

使用在作业的左边;

代码语言:javascript
复制
public class Dog {
   static {
      age++;
   }
   static int age=7;
}

在本例中,您是在声明不允许的内容之前阅读它。这就是为什么你会得到一个非法的前向引用异常。

J= 200;// ok -分配 J=j+ 1;//错误-右手边在声明前读取

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61743510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档