这是我制作的自定义类:
class BufferedReader{
BufferedReader inClient = null;
public BufferedReader(InputStreamReader stream) {
inClient = new BufferedReader(stream); //points the stackoverflow on this line
}
public String readLine(){
return inClient.readLine();
}
}
所以,当我尝试像下面那样访问它时,我最终得到一个stackoverflow:
BufferedReader[] inClient = new BufferedReader[2];
//using a socket here
inClient[0] = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
知道为什么会这样吗?
这给你一个StackOverflowError
,因为你因为你正在使用的命名而有不受控制的递归。构造函数将一直调用自己,直到堆栈溢出。
在构造函数中,您重新分配类的新实例,该实例将无限地重新分配类的新实例,直到达到生成StackOverflowError的最大堆栈大小。
您应该重命名您的类,不要与Java中的类混淆,或者如果您想保留名称,您必须在构造函数和属性定义中使用JDK类的全名:java.io.BufferedReader