为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

largeQ 2022-06-23 09:33:14
我有这个: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.这就是我所看到的:和这个
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

public,作为访问修饰符,不能应用于代码块,也不能应用于代码块内的局部变量。

您似乎只想声明静态最终字段:

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

无需为此使用static块。


查看完整回答
反对 回复 2022-06-23
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这个“静态块”是什么令人困惑。这些被称为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();

}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号