看到有一本书中说,(当一个类里只有非静态变量)非静态变量先分配内存空间,此时它的值
是null,赋值的语句会提取到构造函数中执行。
那么,一个类里有静态变量,静态代码块,非静态变量,非静态代码块和构造函数时,按照
分配内存空间和赋值两个过程,初始化的过程究竟是怎样的呢?
如果将变量的初始化分为分配内存空间和赋值两个过程,一个类的初始化的顺序是怎样的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- ServiceGood 2016-11-23 05:01关注
1.项目启动时,静态变量首先被分配内存地址,并有一个变量名指向这一个地址 static a= xxx;然后加载静态方法。全都只加载一次。并且不会被GC
非静态变量或方法 使用对象的时候才会被调用。那对象就是由构造方法new出来的。你不new这个对象构造方法就不会使用。
2.简单测试类。
public class TestNew {
static int a = 3;
static int b;
static void meth(int x){
System.out.println("x = "+x);
System.out.println("a = "+a);
System.out.println("b = "+b);
}
static {
System.out.println("static block initialized");
b = a*4;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
meth(42);
}
}
结果:static block initialized
x = 42
a = 3
b = 12解决 无用评论 打赏 举报
悬赏问题
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记