Java 引用子类静态成员的父类引发ExceptionInInitializeError

Java 引用子类静态成员的父类引发ExceptionInInitializeError,java,android,sqlite,Java,Android,Sqlite,更新的问题: 我可以设计一个父类来访问子类静态成员而不抛出错误吗?如果这是可能的,我们该怎么做呢 基本上,我有一个DbHelper类,它扩展了SQLiteOpenHelper。我还实现了所需的必要方法 public class DbHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "MyDb.sqlite3"; public static final int DATABASE_VER

更新的问题:

我可以设计一个父类来访问子类静态成员而不抛出错误吗?如果这是可能的,我们该怎么做呢


基本上,我有一个DbHelper类,它扩展了SQLiteOpenHelper。我还实现了所需的必要方法

public class DbHelper extends SQLiteOpenHelper {
  public static final String DATABASE_NAME = "MyDb.sqlite3";
  public static final int DATABASE_VERSION = 1;

  public static final String CREATE_TABLE_FOO = "CREATE TABLE " + FooAdapter.TABLE_NAME
      + " (" + FooAdapter.COLUMN_BAR + " INTEGER PRIMARY KEY)";

  public DbHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE_FOO);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // do nothing
  }
}
然后我将这个类扩展为一个更具体的子类FooAdapter

public class FooAdapter extends DbHelper {
  public static String TABLE_NAME = "foo";
  public static String COLUMN_BAR = "bar";

  public FooAdapter(Context context) {
    super(context);
  }

  // table specific methods, select, insert, delete
}
在注释的帮助下,我发现错误是因为DbHelper正在访问FooAdapter的静态成员,而FooAdapter是DbHelper的子类

因此,如果我在活动中实例化FooAdapter,我会得到ExceptionInInitializerError

FooAdapter fooDb = new FooAdapter(this); // throws ExceptionInInitializerError
但是如果我先实例化DbHelper,那么一切都会正常运行

DbHelper dbHelper = new DbHelper(this); 
FooAdapter fooDb = new FooAdapter(this); // no error

我检查了logcat,最后一行错误显示为
DbHelper.(DbHelper.java…

clinit
指的是类初始化,例如静态变量或静态初始化程序块。但是,您发布的代码在这方面没有显示问题。可能是因为我在扩展类中引用了扩展类的静态成员,而它变成了循环?我将首先尝试消除这些静态。stacktrace显示了问题所在的特定行。是的,我设法找到了问题的根源,它与android或sqlite完全无关。我想我必须重新定义我的类,这样子类中的静态成员就不会被父类引用。我编辑了这个问题以反映真实的问题。