【问题标题】:Java class has only one constructor, no parameter for constructor, all instances of that class will point to the same object in the heap? [closed]Java类只有一个构造函数,构造函数没有参数,该类的所有实例都会指向堆中的同一个对象? [关闭]
【发布时间】:2021-06-08 11:38:00
【问题描述】:

有以下情况:

 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。 将要创建的所有实例都将指向堆中的同一个对象吗?

【问题讨论】:

  • 为什么……你这么认为?你认为为了创建第二个实例/对象,你需要第二个构造函数?
  • 该行为与构造函数无关,但与您将价格字段声明为static 的事实有关。见:What does the 'static' keyword do in a class?
  • “它将打印:8 9” - 不,它不会。问之前你有没有测试和观察你的代码?

标签: java constructor instance heap-memory


【解决方案1】:

Java 中有一条非常简单的规则:new SomethingOrOther()总是创建一个新对象(除非它以某种方式产生异常)。

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

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

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

【讨论】:

    【解决方案2】:

    去掉“价格”的静态关键字自己回答。

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

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 1970-01-01
      • 2021-06-30
      • 2020-10-19
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多