静态块中不允许公共修饰符?

我有这个:


public class Models {


  public static class User extends BaseModel {



    public static {


      public final TableField ID = new TableField("user_id", "userId");


      public final TableField HANDLE = new TableField("user_handle", "userHandle");


      public final TableField EMAIL = new TableField("user_email", "userEmail");


    }


  }


}

java表示不允许public作为修饰符,无论是在“public static {}”块中的static之前还是在final之前。有谁知道为什么?也许我不明白静态块与将所有 3 个字段声明为public final static.


这就是我所看到的:

http://img3.mukewang.com/62b3c2f30001fb2702630066.jpg

和这个


http://img3.mukewang.com/62b3c2fd0001118b04110154.jpg

largeQ
浏览 200回答 2
2回答

浮云间

public,作为访问修饰符,不能应用于代码块,也不能应用于代码块内的局部变量。您似乎只想声明静态最终字段:... public static final TableField ID = new TableField("user_id", "userId"); ...无需为此使用static块。

胡子哥哥

这个“静态块”是什么令人困惑。这些被称为initializer blocks,或在本例中为 a static initializer block。对于前者,可以将其视为对在初始化期间运行的构造函数代码的扩展。在后一种情况下,它们在类的静态初始化期间运行(即第一次访问该类)。这些块对于设置可能需要多行执行的字段或设置外部资源很有用。public class Foobar {    final static int FOO;    // runs when first loading Foobar.class    static {        int i = 1;        i += 2;        FOO = i;    }    final int bar;    // runs when first initializing new Foobar()    {        int j = 3;        j += 4;        bar = i;    }}一般来说,它们不是很常见,但它们特别有用的一个地方是用于绑定本机 JNI 库。例如,此方法确保foobar.dll在访问类之前加载。public class FoobarJNI {    static {        System.loadLibrary("foobar");     }    private native void foo();    private native void bar();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java