静态代码块和静态成员变量初始化按先后顺序

u010581347 2017-08-30 08:21:51
    
public class Demo {
static {
a= 8;
}
static int a = 10;
}

为什么这样也可以, 书上说静态代码块和静态成员变量初始化按先后顺序,a没有先声明也不会报错,这是为什么
...全文
709 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_lzb 2021-02-19
  • 打赏
  • 举报
回复 1
楼主的Demo 输出结果是:10,说先执行static变量再执行static块的明显就错了啊。 类加载的时候在连接阶段的准备中,会为类的静态变量分配内存并初始化默认值,这些静态变量所使用的内存都将在方法区中进行分配。静态基本数据类型被默认赋对应类型的零值(如0、0L、null、false等)。准备阶段在类的上下文检测到了a为int,分配内存并为a赋初值0。之后初始化类的时候先执行static代码块,a=8,然后执行静态变量再赋值,a=10。
FiveYears_plan 2017-09-12
  • 打赏
  • 举报
回复
小白学习了!!
Timor_D 2017-09-11
  • 打赏
  • 举报
回复
内存会先为静态常量加载,然后是静态块,如果下面还有静态的修饰的,比如String类型的 这个会在int型后面
suiyi_94 2017-09-03
  • 打赏
  • 举报
回复
static修饰的字段初始化在static代码块里面; 非static修饰的字段初始化在构造器中 ; 你的代码相当于: static { int a = 10 ; a = 8 ; }
墨笙弘一 2017-08-30
  • 打赏
  • 举报
回复
我感觉应该是先执行变量的值 然后执行语句块吧
qq_38217070 2017-08-30
  • 打赏
  • 举报
回复
虽然你写的顺序是这样,但是装载的时候还是会先装载下面的静态成员变量,所有不会报错的
soton_dolphin 2017-08-30
  • 打赏
  • 举报
回复
成员变量的作用域是整个类,所以成员变量可以在类里面任何地方声明

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧