“ this”关键字在初始化程序块中是什么意思?

Telerik:

这是我的代码:

class StaticBlock {
    {       
        println("initializer block : " + message);
    }
    public StaticBlock(String message) {
        this.message = message;
    }
    private String message;
}

现在的问题是,在初始化程序块中

{       
    println("initializer block : " + message);
}

如果我在this之前添加关键字message,则可以,但是缺少this关键字时会出现错误

编译器说:

StaticBlockDemo.java:34: illegal forward reference
                println("initializer block : " + message);
                                                 ^
1 error

他们为什么不一样?

克里斯·马丁:

我不了解设计原理,但可能有助于阅读Java语言规范的相关部分。

8.6。实例初始化器

实例初始化器允许通过关键字this(§15.8.3)引用当前对象,使用关键字super(§15.11.2,§15.12),并使用范围内的任何类型变量。

有时会限制使用声明后在文本中出现的实例变量,即使这些实例变量在范围内。有关控制对实例变量的前向引用的精确规则,请参见第8.3.2.3节。

8.3.2.3。初始化期间对字段的使用限制

仅当成员声明是static类或接口的实例字段(分别C且满足以下所有条件时,成员声明才需要以文本形式出现

  • 用法发生在的实例(分别为static)变量初始化器中C或的实例(分别为静态)初始化器中C

  • 用法不在作业的左侧。

  • 用法是通过一个简单的名称。

  • C 是包含用法的最里面的类或接口。

以下是该规范中该部分的示例,它被精简以说明您要询问的特定点:

class UseBeforeDeclaration {

    {
        j = 200;
          // ok - assignment
        j = j + 1;
          // error - right hand side reads before declaration
        int k = j = j + 1;
          // error - illegal forward reference to j
        int n = j = 300;
          // ok - j at left hand side of assignment
        int h = j++;
          // error - read before declaration
        int l = this.j * 3;
          // ok - not accessed via simple name
    }

    int j;
}

不过,我还应该指出,即使是代码的编译版本也无法实现您想要的功能。如果运行它:

new StaticBlock("abc");

它将打印

initializer block : null

这是因为初始化程序是在构造函数主体(大部分)之前执行的。以下是规格的要点:

12.5。创建新的类实例

[...]使用以下过程处理指示的构造函数以初始化新对象:

[...]

 4.执行此类的实例初始化器和实例变量初始化器[...]

 5.执行此构造函数的其余部分。[...]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

关键字对象在Kotlin中是什么意思?

new 关键字在界面中是什么意思

'fileprivate'关键字在Swift中是什么意思?

关键字“ transient”在Java中是什么意思?

Swift中的“ required”关键字是什么意思?

ALSO关键字在MLISP中是什么意思?

“ self”关键字在WebWorkers中是什么意思

“和”关键字在OCaml中是什么意思?

界面中的关键字“ new”是什么意思?

“ Base”关键字在Julia中是什么意思?

在关键字“ forEach”中,“ return”关键字是什么意思?

数组初始化中的构造是什么意思?

点(。)在结构初始化程序中是什么意思?

[N ... M]在C聚合初始化程序中是什么意思?

错误:只能在初始化程序中访问静态成员,这是什么意思?

这是什么新的关键字“产量”在Java中13是什么意思?

关键字strictfp是什么意思?

显式关键字是什么意思?

jsr关键字是什么意思?

“ __block”关键字是什么意思?

Laravel路由中的“ as”关键字是什么意思?

Future,async,await 关键字是什么意思?

在Raku类定义中,“具有”关键字在“方法”之前是什么意思?

点(在两个关键字之间)在 ARM 汇编中是什么意思?

D中的“ in”和“ out”关键字是什么意思?

header / impl关键字在kotlin中是什么意思?

芹菜中bind = True关键字是什么意思?

LLVM tablegen中的field关键字是什么意思?

Ruby的AST中的'send'关键字是什么意思?