【问题标题】:Double Constructor Code Blocks, Static code block in Java双构造函数代码块,Java 中的静态代码块
【发布时间】:2013-05-26 17:49:30
【问题描述】:

我偶然发现了这段似乎违反语法规则的 java 代码:

1. public class Sequence { 
2.     Sequence() { System.out.print("c "); } 
3.     { System.out.print("y "); } 
4.     public static void main(String[] args) { 
5.         new Sequence().go(); 
6.     } 
7.     void go() { System.out.print("g "); } 
8.     static { System.out.print("x "); } 
9. }

参考第 3 行,如何打开一个独立的代码块? 我对其进行了测试,并且有效。但是,逻辑是相反的:y 会在 c 之前打印出来。

另外,参考第 8 行,我不确定这个块试图做什么。这似乎是一个类声明。这种情况下,static关键字后面不应该跟类名吗?

有人可以澄清我的疑问吗?谢谢。

【问题讨论】:

标签: java class static constructor double


【解决方案1】:

第 8 行的代码称为静态初始化块。其中第 3 行的代码称为非静态初始化块。

首先执行静态初始化块。如果有多个静态初始化块,它们会按照出现的顺序执行。非静态初始化块(或简单的初始化块)的内容被复制到每个构造函数的内容中。

【讨论】:

  • 值得指出的是,过度使用其中任何一个都可能是代码异味。并不是说它们没有完全有效的用途,只是要明智!
  • 谢谢!您的所有解释都非常有帮助!
猜你喜欢
  • 2021-09-09
  • 2012-01-17
  • 2012-10-30
  • 1970-01-01
  • 2016-08-21
  • 2013-01-04
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多