一个关于java的内存分配机制和变量初始化的问题

2025-06-24 20:43:10
推荐回答(3个)
回答1:

static静态 意思是所有相同的类的对象 被所有Test类对象共用 是在new之前就存在的 叫类变量
所以main中用Test时候 成员变量按顺序构造对象 引用t new的时候调用构造方法 此时 currentPrice discount 都是默认值0
可以这么看下
public class Test
{
static Test t = new Test(2.8);
{
System.out.println(t.price);
}
static double price = 20;
double currentPrice;

public Test(double discount)
{
currentPrice = price - discount;
}

public static void main(String[] args)
{
System.out.println(Test.t.currentPrice);
}
}
而成员变量Test取消了static 这个t构建的时候就不能Test.t了 只能new出新的对象 此时 new出来额度对象共享所有类的成员变量 包括price=20
这个结构没有意义 如果外面是非静态的 一旦new一个对象 就会一直new 到死循环 对比一下这个是会抛错的
public class Test
{
static Test test = new Test();
{
System.out.println(test.a);
}
int a = 3;

public static void main(String[] args)
{
System.out.println(new Test().a);
}
}

回答2:

简单的说吧。
程序运行前期,static 就会被初始化 默认是 0,而你去掉static 之后 price变成了一个普通变量
在new test对象(t)的时候,会把20完成赋值,所以结果是17.2了

回答3:

两个的price值不同