【问题标题】:Infinite memory when declaring a object of a class inside the same class在同一类中声明类的对象时内存无限
【发布时间】:2014-06-05 10:22:31
【问题描述】:
class firsttry{
    public static void main(String [] args){
       int a=10;
       firsttry first = new firsttry();
       first.calculate(a);

    }       


    public void calculate(int b){
        for(int i=0;i<10;i++){  
            System.out.println(b);
            b+=10;  
        }

    }

}

我已经运行了这个程序,它运行良好。我想知道这怎么可能。它不是分配无限内存吗? "first" 对象本身具有 "first" 对象,依此类推。请解释一下。

【问题讨论】:

  • 试着阐述你想问的第一个对象本身有第一个对象你这句话是什么意思???
  • 请使用空格而不是制表符来格式化 Stack Overflow 上的代码 - 并在发布前注意预览。您的代码目前很难阅读。此外,即使对于示例代码,也遵循正常的命名约定使其更易于理解。

标签: java class object memory


【解决方案1】:

main 是一个静态方法,因此它不需要任何firsttry 类型的对象实例(即没有创建firsttry 类型的对象)。特别是,main 在您创建 firsttry 类型的新对象时不会调用,因此 new 调用只执行一次。

如果您在firsttry 类的构造函数中有new firsttry(..),则确实存在执行infinite 次数的危险。

【讨论】:

    【解决方案2】:

    没有。这是完全正常的。看:

    你运行static main。您现在没有实例。

    创建firsttry 的一个实例,然后调用calculate,它的循环有一个结束条件。实例化firsttry 时不会调用main 方法。这不是构造函数,而是static 方法。

    所以,它会运行循环然后停止。这很正常。

    【讨论】:

      【解决方案3】:

      我不知道您到底想问什么,但我认为您对静态方法和对象感到困惑。 main() 是一种不需要实例化的静态方法。此外,如果您对以下内容感到困惑:

      firsttry first = new firsttry();  
      

      然后:

      firsttry first;   
      

      是声明和:

      first = new firsttry();  
      

      是实例化。

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2014-12-01
        • 2020-09-29
        • 2012-11-18
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        相关资源
        最近更新 更多