gpt4 book ai didi

java - 我们可以在java的非静态类中有静态 block 吗?

转载 作者:行者123 更新时间:2023-11-29 10:03:09 27 4
gpt4 key购买 nike

我对 java 中的静态有几个问题

  1. 我们可以在非静态类中有静态 block 吗?如果一个对象那个(非静态)类在其他一些类中初始化,将然后执行静态 block ??

  2. 如果有一个静态类有静态 block 和变量( int a =3) 和 main() 方法,它被执行然后将变量先进行初始化还是先执行静态 block ?我知道该静态 block 在 main() 方法之前执行。

最佳答案

1)不,你不能,试试这个

class Test1 {

class X {
static { <-- compile error: Cannot define static initializer in inner type Test1.X
}
}
...

X 应该是静态的。

注意:我假设我们在谈论嵌套类,因为这是静态修饰符适用于类的地方

2) 这取决于,看这个

class Test1 {
static {
x = 3;
}

static int x = 2;

public static void main(String[] args) throws Exception {
System.out.println(x);
}
}

输出

2

但是现在

class Test1 {
static int x = 2;

static {
x = 3;
}

public static void main(String[] args) throws Exception {
System.out.println(x);
}
}

输出将是

3

静态初始化只在类加载期间运行,它总是发生在任何实例实例化之前。有趣的是,静态字段初始化和静态初始化 block 代码都在同一个名为 <clinit> 的字节码函数中运行。 :

  static <clinit>()V
L0
LINENUMBER 12 L0
ICONST_3
PUTSTATIC test/Test1.x : I
L1
LINENUMBER 15 L1
ICONST_2
PUTSTATIC test/Test1.x : I
RETURN

关于java - 我们可以在java的非静态类中有静态 block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563844/

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