Java class 只有一个构造函数,构造函数没有参数,那个 class 的所有实例都会指向堆中的同一个对象?
Java class has only one constructor, no parameter for constructor, all instances of that class will point to the same object in the heap?
有以下情况:
class Bond {
private static int price = 5;
public boolean sell() {
if(price<10) {
price++;
return true;
} else if(price>=10) {
return false;
}
return false;
}
public static void main(String[] cash) {
new Bond().sell();
new Bond().sell();
new Bond().sell();
System.out.print(price);
Bond bond1=new Bond();
System.out.print(price);
}
}
它将打印:8 9。
将创建的所有实例都将指向堆中的同一个对象吗?
Java中有一个非常简单的规则:new SomethingOrOther()
将总是创建一个新对象(除非它以某种方式产生异常)。
所以答案显然是:不,您发布的 main
方法将创建 4 个 Bond
.
实例
这些实例恰好没有任何使它们以任何有趣的方式不同的字段,但它们是个不同的实例。
它“看起来”只存在一个实例的原因是您的 price
字段是 static
,这意味着它属于 class Bond
本身而不是单个实例,这也意味着永远只有一个 price
,无论你有多少个实例(是的,即使根本没有实例)。
去除“价格”的静态关键字自己回答。
静态变量在所有对象实例中保持相同的值。
有以下情况:
class Bond {
private static int price = 5;
public boolean sell() {
if(price<10) {
price++;
return true;
} else if(price>=10) {
return false;
}
return false;
}
public static void main(String[] cash) {
new Bond().sell();
new Bond().sell();
new Bond().sell();
System.out.print(price);
Bond bond1=new Bond();
System.out.print(price);
}
}
它将打印:8 9。 将创建的所有实例都将指向堆中的同一个对象吗?
Java中有一个非常简单的规则:new SomethingOrOther()
将总是创建一个新对象(除非它以某种方式产生异常)。
所以答案显然是:不,您发布的 main
方法将创建 4 个 Bond
.
这些实例恰好没有任何使它们以任何有趣的方式不同的字段,但它们是个不同的实例。
它“看起来”只存在一个实例的原因是您的 price
字段是 static
,这意味着它属于 class Bond
本身而不是单个实例,这也意味着永远只有一个 price
,无论你有多少个实例(是的,即使根本没有实例)。
去除“价格”的静态关键字自己回答。
静态变量在所有对象实例中保持相同的值。