由 class 声明 subclass 引起的 StackOverflowError?
StackOverflowError caused by class declaring subclass?
我正在开发一个使用 class 和一些子 class 的项目。当我声明 Database
class 时,出现此错误:
Exception in thread "main" java.lang.WhosebugError
at data.DatabaseConnectionHandler.<init>(DatabaseConnectionHandler.java:12)
at data.Database.<init>(Database.java:18)
最后两行又重复了大约 10000 次。
Database
是我的 parent class 而 DatabaseConnectionHandler
是子 class。在Database
class中,我声明了一个DatabaseConnectionHandler
的实例,我想这可能是原因,但我不知道为什么。
Database
Class:
public class Database {
protected static Connection connection = null;
protected static Statement statement = null;
protected static ResultSet resultSet = null;
DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler(); //Line 18
Registration regis = new Registration();
public Database() throws SQLException {
DBCH.openConnection();
}
和DatabaseConnectionHandler
Class:
public class DatabaseConnectionHandler extends Database {
private final String URL = "jdbc:mysql://localhost:3306/foo_bar";
private final String USERNAME = "foo";
private final String PASSWORD = "bar";
public DatabaseConnectionHandler() throws SQLException {} //line 12
protected void openConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
connectionStatus = true;
} catch (SQLException | ClassNotFoundException exe) {
System.out.println(exe);
connectionStatus = false;
}
}
是否 Database()
声明 DatabaseConnectionHandler()
导致此错误?如果是,我该如何解决?如果不是,是什么导致了问题,我该如何解决?
创建 Database
时,您还创建了 DatabaseConnectionHandler
:
public class Database {
//...
DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler();
//...
}
而 DatabaseConnectionHandler
是 Database
:
public class DatabaseConnectionHandler extends Database {
//...
}
因此创建 Database
需要创建 Database
。这是一个无限递归。
您有两个选择:
- 在创建
Database
时不要创建 DatabaseConnectionHandler
- 没有
DatabaseConnectionHandler
本身就是 Database
我正在开发一个使用 class 和一些子 class 的项目。当我声明 Database
class 时,出现此错误:
Exception in thread "main" java.lang.WhosebugError
at data.DatabaseConnectionHandler.<init>(DatabaseConnectionHandler.java:12)
at data.Database.<init>(Database.java:18)
最后两行又重复了大约 10000 次。
Database
是我的 parent class 而 DatabaseConnectionHandler
是子 class。在Database
class中,我声明了一个DatabaseConnectionHandler
的实例,我想这可能是原因,但我不知道为什么。
Database
Class:
public class Database {
protected static Connection connection = null;
protected static Statement statement = null;
protected static ResultSet resultSet = null;
DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler(); //Line 18
Registration regis = new Registration();
public Database() throws SQLException {
DBCH.openConnection();
}
和DatabaseConnectionHandler
Class:
public class DatabaseConnectionHandler extends Database {
private final String URL = "jdbc:mysql://localhost:3306/foo_bar";
private final String USERNAME = "foo";
private final String PASSWORD = "bar";
public DatabaseConnectionHandler() throws SQLException {} //line 12
protected void openConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
connectionStatus = true;
} catch (SQLException | ClassNotFoundException exe) {
System.out.println(exe);
connectionStatus = false;
}
}
是否 Database()
声明 DatabaseConnectionHandler()
导致此错误?如果是,我该如何解决?如果不是,是什么导致了问题,我该如何解决?
创建 Database
时,您还创建了 DatabaseConnectionHandler
:
public class Database {
//...
DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler();
//...
}
而 DatabaseConnectionHandler
是 Database
:
public class DatabaseConnectionHandler extends Database {
//...
}
因此创建 Database
需要创建 Database
。这是一个无限递归。
您有两个选择:
- 在创建
Database
时不要创建 - 没有
DatabaseConnectionHandler
本身就是Database
DatabaseConnectionHandler