Java类只有一个构造函数,构造函数没有参数,该类的所有实例都将指向堆中的同一个对象?

Java类只有一个构造函数,构造函数没有参数,该类的所有实例都将指向堆中的同一个对象?,java,constructor,instance,heap-memory,Java,Constructor,Instance,Heap Memory,有下列情况: 类债券{ 私有静态整数价格=5; 公共布尔sell(){ 如果(价格=10){ 返回false; } 返回false; } 公共静态void main(字符串[]现金){ 新债券出售; 新债券出售; 新债券出售; 系统输出打印(价格); Bond bond1=新债券(); 系统输出打印(价格); } } 它将打印:8 9。 所有要创建的实例都将指向堆中的同一个对象吗?Java中有一个非常简单的规则:newsomethingorother()将始终创建一个新对象(除非它以某种方式产

有下列情况:

类债券{
私有静态整数价格=5;
公共布尔sell(){
如果(价格=10){
返回false;
}
返回false;
}
公共静态void main(字符串[]现金){
新债券出售;
新债券出售;
新债券出售;
系统输出打印(价格);
Bond bond1=新债券();
系统输出打印(价格);
}
}
它将打印:8 9。
所有要创建的实例都将指向堆中的同一个对象吗?

Java中有一个非常简单的规则:
newsomethingorother()
将始终创建一个新对象(除非它以某种方式产生异常)

因此答案显然是:不,您发布的
main
方法将创建4个
Bond
实例

这些实例碰巧没有任何字段以任何有趣的方式使它们有所不同,但它们是不同的实例

它“看起来”只存在一个实例的原因是,您的
price
字段是
static
,这意味着它属于类
Bond
本身,而不属于单个实例,这也意味着无论有多少实例,都只有一个
price
(是的,即使根本没有实例)。

删除“price”的静态关键字,自己回答


静态变量在所有对象实例中都具有相同的值。

为什么……您这样认为?您认为为了创建第二个实例/对象,您需要第二个构造函数?这种行为与构造函数无关,但与您将价格字段声明为
static
这一事实有关。请参阅:“它将打印:89”-不会。在询问之前,您是否测试并观察了您的代码?