Tag: 堆栈溢出

未知的StackOverFlow错误,可能与类对象ArrayList和数据存储有关

这是我得到的错误代码: Exception in thread “main” java.lang.StackOverflowError at JavaKeywords.(JavaKeywords.java:5) at LAddClass.(LAddClass.java:8) at LStore.(LStore.java:9) at LAddClass.(LAddClass.java:9) at LStore.(LStore.java:9) 以下是上述三个类别。 很抱歉发布了几乎整个程序的代码,但我真的不知道错误在哪里。 下面突出显示错误代码所包含的三行。 这是一个UML-toJava转换器的程序。 用户必须输入类名和类类型(公共/私有),并将变量存储在虚拟类中。 我已经创建了一个类对象的ArrayList来存储用户的输入,String className和boolean isPrivate。 稍后,必须在GUI窗口中打印类名和类型,以便用户复制文本。 我猜错误与将值( String className, String classMethod, boolean isPrivate )存储到ArrayList无关,后者是LStore类对象的arrayList。 我之前有一个Null Pointer Exception错误,它应该与arraylist有关,在我改变了一些代码和类名后,我得到了这个新的stackOverFlow错误。 LAddClass class用于使用checkName()并将bolean isPrivate转换为字符串供以后使用 public class LAddClass{ private String className; private String methodName; private boolean isPrivate; JavaKeywords keyObject = new […]

StackOverflowError在Java中意味着什么? 它的修复是什么?

我遇到以下错误: Exception in thread “main” java.lang.StackOverflowError at Account.draw(Account.java:47) 这是代码的相关部分: public double draw(double c) { if (c > 0) { return c; } else if (c AccBalance) { AccBalance=-c; return AccBalance; } return draw(c); } 我怎样才能解决这个问题?

我序列化对象时的StackOverflowError

我想用这种方法seriliaze一个对象: public void serializ(CRDT m) throws IOException { ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); ObjectOutputStream stream = new ObjectOutputStream(byteOutput); stream.writeObject(m); sumMemory = byteOutput.size(); stream.flush(); stream.close(); byteOutput.flush(); byteOutput.close(); } 我有一个exceptionjava.lang.StackOverflowError Exception in thread “main” java.lang.StackOverflowError at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1169) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) […]

为什么编译此代码会导致编译器堆栈溢出?

interface Pong {} class Ping implements Pong<Pong<? super Ping<Ping>>> { static void Ping() { Pong<? super Ping> Ping = new Ping(); } } 尝试编译这会给出错误: The system is out of resources. Consult the following stack trace for details. java.lang.StackOverflowError at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554) at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260) at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2592) at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554) … 代码由github上的etorreborre提供。

如何获得StackOverflowError的完整堆栈

观察StackOverflowError时如何检索完整的调用堆栈? 考虑这个简单的例子: public class Overflow { public Overflow() { new Overflow(); } public static void a() { new Overflow(); } public static void main(String[] argv) { a(); } } 现在报告的错误是: Exception in thread “main” java.lang.StackOverflowError at Overflow.(Overflow.java:11) [last line repeated many times] 但我无法在堆栈跟踪中看到main和方法。 我的猜测是因为溢出,堆栈中的最新条目取代了最旧的条目(?)。 现在,如何在输出中获取a和main堆栈条目? 背景是我得到一个StackOverflowError(但这不是无限递归,因为它在增加堆栈大小时不会发生)并且很难在代码中发现问题。 我只从java.util.regex.Pattern获取多行,但不知道代码调用的那些信息。 应用程序太复杂,无法在每次调用Pattern设置断点。

Stackoverflow错误

下面给出的代码显示了运行时的Stackoverflow错误。但是如果我创建另一个类CarChange来创建Car的对象,它运行成功。 我是初学者,用这段代码来理解java中upcasting的重要性。 public class Car { int i; Car[] c=new Car[2]; Car() { c[0] = new Polo(); i=0; } void drive(){ c[i].testdrive(); //the overloaded method in subclasses polo and swift } void change() { if(i==0) { i++; c[i] = new Swift(); } } public void testdrive() { //overloaded method in subclasses polo and swift System.out.println(” […]

在main方法之外创建对象时出现stackoverflow错误

运行此代码时,它显示Stackoverflow错误。 我做错了什么,为什么代码编译? public class Foo { int a = 5; Foo f = new Foo(); void go() { System.out.println(fa); } public static void main(String[] args) { Foo f2 = new Foo(); f2.go(); } }

如何避免递归函数的StackOverflowError

我正在编写一个函数,可以调用自己大约5000次。 当然,我得到一个StackOverflowError 。 有什么方法可以用相当简单的方式重写这段代码吗?: void checkBlocks(Block b, int amm) { //Stuff that might issue a return call Block blockDown = (Block) b.getRelative(BlockFace.DOWN); if (condition) checkBlocks(blockDown, amm); Block blockUp = (Block) b.getRelative(BlockFace.UP); if (condition) checkBlocks(blockUp, amm); //Same code 4 more times for each side } 顺便说一下,我们可以称之为function的深度有多大?

理解Java堆栈

有这个代码: public class Main { public static void main(final String[] args) throws Exception { System.out.print(“1”); doAnything(); System.out.println(“2”); } private static void doAnything() { try { doAnything(); } catch (final Error e) { System.out.print(“y”); } } } 还有输出: 1yyyyyyyy2 为什么它打印“y”八次而不再打印。 遇到StackOverflowError时,Java如何调用println() ?

用于匹配开始/结束标记的Java正则表达式会导致堆栈溢出

Java Pattern类的标准实现使用递归来实现许多forms的正则表达式(例如,某些运算符,交替)。 这种方法导致堆栈溢出问题,输入字符串超过(相对较小)长度,甚至可能不超过1,000个字符,具体取决于所涉及的正则表达式。 一个典型的例子是以下正则表达式,使用交替从周围的XML字符串中提取可能的多行元素(名为Data ),该字符串已经提供: (?(?:.|\r|\n)+?) 上面的正则表达式与Matcher.find()方法一起用于读取“数据”捕获组并按预期工作,直到提供的输入字符串的长度超过1,200个字符左右,在这种情况下,它会导致堆栈溢出。 是否可以重写上述正则表达式以避免堆栈溢出问题?