public class Category {
private Category parentCategory;
private Set<Category> childCategories;
private String name;
public Category() {
childCategories = new HashSet<Category>();
}
public Category getParentCategory() {
return parentCategory;
}
public void setParentCategory(Category parentCategory) {
this.parentCategory = parentCategory;
}
public Set<Category> getChildCategories() {
return childCategories;
}
public void setChildCategories(Set<Category> childCategories) {
this.childCategories = childCategories;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Category [childCategories=" + childCategories + ", name="
+ name + ", parentCategory=" + parentCategory + "]";
}
}
public static void main(String[] args) {
Category books = new Category();
books.setName("Books");
books.setParentCategory(null);
Category novels = new Category();
novels.setName("Novels");
novels.setParentCategory(books);
books.getChildCategories().add(novels);
//novels.setChildCategories(null);
System.out.println("Books > " + books);
}
在System.out.println
正在生成StackOverflowError
。
当您执行时toString()
,您称呼toString()
孩子们的。这里没有问题,只不过您toString()
在这里调用了父对象。这将称呼toString()
孩子,等等。
不错的无限循环。
摆脱它的最好方法是将您的toString()
方法更改为:
@Override
public String toString() {
return "Category [childCategories=" + childCategories + ", name="
+ name + ", parentCategory=" + parentCategory.getName() + "]";
}
这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。
编辑: 正如博洛在下面说的那样,您将需要检查parentCategory不为null,NullPointerException
如果有则为null
。
这是我的父类,有两个名为的方法。带有参数的那个在子类中使用。 这是我的子类,在子类的方法中,我使用父类的方法: 当我尝试显示子类的对象时,我得到以下错误: 线程“main”java.lang.StackOverflowError中出现异常
我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。
问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进
E/AndroidRuntime:致命异常:main Process:com.marsad.wallpaperApp,pid:20425 java.lang.ArithmeticException:divide by zero 嗨,当我点击gif图像应用作为动态壁纸,大多数情况下一切都很好,但有时应用程序崩溃与错误 logcat E/AndroidRuntime:致命异常:主进程:com.mars
URL类 来自服务器的最终响应:
问题内容: 我正在尝试下载一个zip文件,但出现了 Stream Closed Exception 。当我使用Swing GUI时,会出现此错误,但是如果我使用控制台,则不会有问题。为什么会出现此异常?我该如何解决? 这是我的代码: 这是堆栈跟踪 问题答案: 此异常通常表示连接突然关闭。我将查看服务器上的日志,看看是否有错误。