1

如果在 Android 应用程序中使用,以下两个示例有什么区别?

示例-1

public class ExampleClassOne {  
    public static int x = 9;
}

示例 2

public class ExampleClassTwo{   
  public static int x;
  static{   
      x = 9;    
  } 
}
4

4 回答 4

1

对于此示例,没有区别。这两种形式的作用完全相同。(事实上​​,我怀疑生成的字节码实际上是相同的。)

在某些情况下存在差异。或者更准确地说,您可以表达的内容有所不同。突然想到的一对是:

  • 初始化程序static块可以处理异常(尤其是检查异常),但初始化程序表达式不能。

  • 初始化程序块可以将静态变量static初始化为任意复杂语句序列的结果,但初始化程序表达式仅限于您可以在单个表达式中计算的内容。


话虽如此,我还是建议您尽可能使用更简单的初始化表达式形式。毫无疑问,它更具可读性。

于 2013-07-06T18:23:34.210 回答
0

根据Oracle 教程

public static int x = 9;

当初始化值可用并且初始化可以放在一行时,这很有效。但是,这种形式的初始化由于其简单性而具有局限性。如果初始化需要一些逻辑(例如,错误处理或填充复杂数组的 for 循环),简单的赋值是不够的。

实例变量可以在构造函数中初始化,其中可以使用错误处理或其他逻辑。为了为类变量提供相同的功能,Java 编程语言包括静态初始化块。

编译器实际上做的是在内部生成一个单独的类初始化例程,该例程将所有静态变量初始化器和所有静态初始化器代码块按照它们在类声明中出现的顺序组合在一起。当类第一次加载时,这个单一的初始化过程会自动运行一次,只有一次。

但是在您的情况下,使用您的代码,这没有什么区别。

于 2013-07-06T18:16:31.080 回答
0

通常该static块用于更复杂的初始化,例如,如果您有一个List并想要填充它。

编辑(回滚;))在您的情况下初始化是等效的。

于 2013-07-06T18:16:34.680 回答
0

它们都是相同的,将在类创建/初始化时被调用和初始化。没有这样的差异。

于 2013-07-06T18:16:56.683 回答