簡體   English   中英

由類聲明子類引起的StackOverflowError?

[英]StackOverflowError caused by class declaring subclass?

我正在使用一個類和一些子類的項目中。 當我聲明Database類時,出現以下錯誤:

Exception in thread "main" java.lang.StackOverflowError
    at data.DatabaseConnectionHandler.<init>(DatabaseConnectionHandler.java:12)
    at data.Database.<init>(Database.java:18)

最后兩行重復大約10000次。

Database是我的父類,而DatabaseConnectionHandler是子類。 Database類中,我聲明了DatabaseConnectionHandler一個實例,我認為這可能是原因,但我不知道為什么。

Database類:

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類:

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 這是無限遞歸。

您有兩種選擇:

  1. 創建DatabaseConnectionHandler時不要創建Database
  2. 不要讓DatabaseConnectionHandler本身成為Database

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM