带有自定义类的BufferedReader的java.lang.StackOverflowError

问题描述 投票:0回答:2

这是我制作的自定义类:

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())); 

知道为什么会这样吗?

java arrays sockets bufferedreader inputstreamreader
2个回答
3
投票

这给你一个StackOverflowError,因为你因为你正在使用的命名而有不受控制的递归。构造函数将一直调用自己,直到堆栈溢出。


1
投票

在构造函数中,您重新分配类的新实例,该实例将无限地重新分配类的新实例,直到达到生成StackOverflowError的最大堆栈大小。

您应该重命名您的类,不要与Java中的类混淆,或者如果您想保留名称,您必须在构造函数和属性定义中使用JDK类的全名:java.io.BufferedReader

© www.soinside.com 2019 - 2024. All rights reserved.