gpt4 book ai didi

java - 接口(interface)中的静态初始化

转载 作者:IT老高 更新时间:2023-10-28 20:42:54 27 4
gpt4 key购买 nike

当我试图写这样的东西时:

public interface MyInterface {
static {
System.out.println("Hello!");
}
}

编译器无法编译它。

但是当我写这样的东西时:

interface MyInterface {
Integer iconst = Integer.valueOf(1);
}

然后反编译,我看到了静态初始化:

public interface MyInterface{
public static final java.lang.Integer i;

static {};
Code:
0: iconst_1
1: invokestatic #1; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
4: putstatic #2; //Field i:Ljava/lang/Integer;
7: return
}

您能向我解释一下这种行为吗?

最佳答案

接口(interface)不应该有副作用,甚至适用于静态初始化器。它们将具有高度依赖于 JVM 实现的行为。看下面的代码

public class InterfaceSideEffects {
public static void main(String[] args) {
System.out.println("InterfaceSideEffects.main()");
Impl i=new Impl();
System.out.println("Impl initialized");
i.bla();
System.out.println("Impl instance method invoked");
Foo f=new Impl();
System.out.println("Impl initialized and assigned to Foo");
f.bla();
System.out.println("Foo interface method invoked");
}
}
interface Foo {
int dummy=Bar.haveSideEffect();
void bla();
}
class Bar {
static int haveSideEffect() {
System.out.println("interface Foo initialized");
return 0;
}
}
class Impl implements Foo {
public void bla() {
}
}

你觉得什么时候会打印出interface Foo initialized?之后尝试猜测并运行代码。答案可能会让您大吃一惊。

关于java - 接口(interface)中的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19722847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com