Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#,C++;和爪哇_C#_Java_Javascript_C++ - Fatal编程技术网

在C#,C++;和爪哇

在C#,C++;和爪哇,c#,java,javascript,c++,C#,Java,Javascript,C++,我在看C#教程时遇到了StackOverflowException 叙述者使用下面的代码片段给出了一个此类异常的简洁示例 public class Employee { private string _name; public string Name { get{ return Name; } } } 我想找一些C++和java中的简单代码,特别是JavaScript中的一些导致堆栈溢出的例子。 此解释是java、C++和C++的StAccOff

我在看C#教程时遇到了StackOverflowException

叙述者使用下面的代码片段给出了一个此类异常的简洁示例

public class Employee
{
    private string _name;

    public string Name
    {
       get{ return Name; }
    }
}

我想找一些C++和java中的简单代码,特别是JavaScript中的一些导致堆栈溢出的例子。

<强>此解释是java、C++和C++的StAccOffFoULT异常背后的根本原因。< /强>

在任何语言中,由于递归方法调用,通常都会导致堆栈溢出异常

假设您有一个方法,该方法正在为无限递归循环调用自身或任何其他方法;它将导致Stackoverflowexception。这背后的原因是方法调用堆栈被填满,它将无法容纳任何其他方法调用

方法调用堆栈如下图所示。

解释——假设Main方法有五条语句,第三个方法调用methodA,那么Main方法的执行将在statement3处暂停,methodA将加载到调用堆栈中。然后方法A调用了方法B。因此methodB也被加载到堆栈中


因此,通过这种方式,无限递归调用会使调用堆栈填满,此时它无法提供更多的方法。因此它抛出一个StackOverflowException。

对于您的代码段,这是由于递归方法调用:

public string Name
{
   get{ return Name; }
}
您正在递归调用
名称
方法/属性。堆栈将填满(使用父
名称
方法),直到溢出并引发
堆栈溢出异常

public string Name
{
   get{ return Name; }
}
此属性使用
返回名称调用自身。这会导致无限递归。这就是为什么当你使用这个属性时,你会得到。我认为该物业的正确用途应为:

public string Name
{
   get{ return _name; }
}
针对执行堆栈溢出错误引发StackOverflowException, 通常在非常深或无限递归的情况下

从.NET Framework 2.0版开始,StackOverflowException 对象不能被try-catch块和相应的 默认情况下,进程被终止。因此,建议用户 编写代码以检测和防止堆栈溢出。例如 如果应用程序依赖递归,请使用计数器或状态 终止递归循环的条件

在Java中:

public class Test {
    public static void main(String[] args) {
        main(args);
    }
}

一般来说,任何没有终止或迭代次数过多的递归函数都会导致此问题。

递归:请参阅递归。只需用任何语言编写一个没有中断条件的递归函数,它就会产生异常。@GuruKara,有尾部递归的语言除外。+1回答很好。请注意,优化的语言可能不会在问题中抛出SO on函数。解释一下为什么
\u name
应该在
name
不起作用的情况下起作用,这将有助于回答这个问题。