这将打印出r1 r4 pre b1 b2 r3 r2 hawk
但我不明白为什么它打印r3 r2而不是r2 r3,这似乎是倒退的。如果初始化块是自上而下执行的,为什么它从底部语句r3开始,到R2结束呢?在超类Bird中,它的执行方式与我预期的b1和b2一样,从上到下,但在超类Raptor中,在构造函数运行之后,控件似乎首先跳转到最后一条语句,并将自己工作回顶部。有什么想法吗?
快把我逼疯了。
class Bird {
{ System.out.print("b1 "); }
public Bird()
{ System.out.print("b2 ");
}
class Raptor extends Bird {
static { System.out.print("r1 "); }
public Raptor()
{System.out.print("r2 "); } // don't these two print backwards?
{System.out.print("r3 "); } // ???
static { System.out.print("r4 "); }
}
class Hawk extends Raptor {
public static void main(String[] args) {
System.out.print("pre ");
new Hawk();
System.out.println("hawk ");
}
}
您的类raptor
有一个初始化块。它被复制到构造函数中。
public Raptor()
{System.out.print("r2 "); } // don't these two print backwards?
{System.out.print("r3 "); } // ???
变成
public Raptor() {
super();
System.out.print("r3 "); // <-- initialization block copied in.
System.out.print("r2 ");
}
这就是为什么你会得到你所做的输出。
我有一个JavaFX应用程序,它与用Java编写的控制器类一起使用FXML。在Java控制器中,在FXML节点初始化之前,我需要小心不要对其进行操作(否则我会得到一个NullPointerException),这在运行初始化方法之前是无法保证的。所以我发现自己经常这样做: 控制器在FXML文件中设置如下: 然后是Java文件中的控制器。 这是可行的,但它笨重且重复。我必须创建globalValue
问题内容: 我们可以将代码放入构造函数或方法或初始化块中。初始化块有什么用?每个Java程序都必须有它吗? 问题答案: 首先,有两种类型的初始化块: 实例初始化块,以及 静态初始化块。 此代码应说明它们的用法以及执行顺序: 印刷品: 如果要运行某些代码而不管使用哪个构造函数,或者想要对匿名类进行一些实例初始化,则实例迭代块很有用。
所以我想用java编写一个Tic-Tac-Toe游戏。 现在点击一个按钮,我想把按钮的图像设置为“十字”或“圆圈”,但是一旦一个类型跟随代码,按钮就会消失,直到我悬停在它们上面,然后它们就会返回。 没有上面的代码会是什么样子 这里的项目结构
我试图在循环中初始化数组C,但它给出了错误: C是类ipdata的数组,我已经声明了它,并试图在循环中初始化它。 有什么问题吗?它表示:无法访问cluster_anlysis类型的封闭实例。必须使用cluster_anlysis类型的封闭实例限定分配(例如,x.new A(),其中x是cluster_anlysis的实例)。
我有我的文件下面: 我也有例子。: 出于某种原因,当我做在我的根目录(不是)我得到错误: 有人能给我解释一下这个错误中的问题吗?这是因为我的依赖项没有正确安装,还是因为其他原因?
问题内容: 我有2节课: Class A: Class B: I create a Main class which just creates new A: The output I get is: 如您所见,A的构造函数在其静态初始值设定项之前被调用。 我了解它与我创建的循环依赖关系有关,但我印象中静态初始化程序应始终在构造函数之前运行。 发生这种情况的原因是什么(技术上在Java实现中)? 是