我已经从这个和这个 答案中理解了你的代码可能进入无限循环导致stackOverFlowError的可能情况,但我不明白如何在这里复制相同的场景,
public class A {
private B b = new B();
@Override
public String toString() {
return "b "+b;
}
}
public class B {
private A a = new A();
@Override
public String toString() {
return "";
}
}
public class StackoverflowErrorTest {
public static void main(String[] args) {
A a = new A();
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码生成下面的堆栈跟踪: -
Exception in thread "main" java.lang.StackOverflowError
at stackoverflowerror.B.<init>(B.java:5)
at stackoverflowerror.A.<init>(A.java:5)
.
.
.
Run Code Online (Sandbox Code Playgroud)
根据我的理解,当我在main方法中打印对象'a'时,它将调用A类的toString方法,在该方法中,我将返回B类的对象,该对象将隐式调用B类的toString方法.现在,在B类的toString方法中,我返回的是一个空字符串.那么无限循环的范围如何以及在何处进入图片.请解释.
我正在设计一个可重用的类库,其中包含2个名为core.xml.dll和core.string.dll的程序集(以及其他程序集).
xml程序集引用字符串程序集以使用某些字符串帮助程序方法.
但是现在有一个字符串方法可以从使用xml程序集中包含的方法中受益.
如果我从字符串程序集引用xml程序集,我将创建一个循环依赖项,并且无法从源代码构建两个程序集.(即鸡肉和鸡蛋问题).
为了遵循"不要重复自己"的原则,我希望避免重复两个程序集中的功能.如果我在实现中发现错误,我只想在一个地方修复它.
虽然我可以将组件合并为一个,但这并不理想,因为它会降低组件的内聚性.
我需要重新构建和重新部署整个程序集,只是为了对特定类进行小的更改.而且,最终,有这么多的依赖关系,我可能会最终得到一个巨大的库程序集.
因此,在可重用的库集合集的上下文中,这里使用的最佳方法是什么?另外,.NET框架本身如何处理这个问题?
(在Reflector中,似乎System.Configuration.dll引用System.XML.DLL,反之亦然.这实际上是否正确,如果是这样,如何管理循环依赖?)
容器可以包含属于人的自行车和椅子.我想检查,如果容器包含自行车或所述人的椅子.没有使用这可能instanceof吗?
public class Container {
public Map<Person, List<Item>> items = new HashMap<>();
public void add(Person p, Item item) {
items.get(p).add(item);
}
public boolean containsChair(Person owner) {
for(Item i : items.get(owner)) {
if(i instanceof Chair) {
return true;
}
}
return false;
}
public boolean containsBike(Person owner) {
for(Item i : items.get(owner)) {
if(i instanceof Bike) {
return true;
}
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
出于说明的目的,Item,Bike,Chair,Person都是最简单的类存根:
public class Person { public String name; }
public abstract class Item {} …Run Code Online (Sandbox Code Playgroud) 嗨任何人可以请解释我为什么是这样的代码片段给我的StackOverflowError我很感激,如果你能解释发生了什么事时,instanceObj初始化和调用构造函数ObjectTest和java.lang.Object继承构造函数.在我看来ObjectTest构造函数循环一遍又一遍.但我不知道确切的原因?所以任何建议......
public class ObjectTest {
public ObjectTest() {
}
ObjectTest instanceObj = new ObjectTest();
public static void main(String[] args) {
ObjectTest localObj = new ObjectTest();
}
}
Run Code Online (Sandbox Code Playgroud) 目前我正在努力解决一个小问题,我猜。执行我的主要方法时,我收到一个计算器溢出错误。这是因为 Artist 类在 Language 类中创建了一个实例来访问来自 Artist 类(方法)的一些参数。您对我如何根据当前设置设置构造有任何建议吗?
有五个类相互交互:
第一类是带有主要方法的概览类。她应该创建我的控件类的一个实例并执行方法 control.displayArtist(salary, name):
public class Overview {
private static Control control;
private static String name;
private static int salary;
public static void main (String[]args) {
control = new Control();
control.displayArtist(salary, name);
}
}
Run Code Online (Sandbox Code Playgroud)
第二个类是 Control 类。类 Control 创建类 Language 的实例,并由方法 displayArtist(int salary, String name) 组成。这个方法是在Overview类的main方法中直接调用的:
public class Control {
private Language language;
public Control() {
language = new Language();
}
public void displayArtist(int salary, String name) {
language.displayArtistAndSalary(name, salary);
}
}
Run Code Online (Sandbox Code Playgroud)
Language …