【问题标题】:integer array static initialization整数数组静态初始化
【发布时间】:2011-05-25 21:31:16
【问题描述】:

哪两个代码片段正确地创建和初始化了一个int的静态数组 元素? (选择两项。)

一个。

static final int[] a = { 100,200 };

B.

static final int[] a;
static { a=new int[2]; a[0]=100; a[1]=200; }

C.

static final int[] a = new int[2]{ 100,200 };

D.

static final int[] a;
static void init() { a = new int[3]; a[0]=100; a[1]=200; }

答案:A,B

这里甚至 D 似乎都是真的,谁能告诉我为什么 D 是假的。

【问题讨论】:

  • 这不是有效的 Scheme、Ruby、Python 或 LISP 代码。请格式化您的代码并指定您使用的语言/框架。
  • 您可能需要更改标题,以便它真正总结问题..

标签: java arrays static


【解决方案1】:

正确的答案是 1 和 2(或 A 和 B 用您的符号表示),一个同样正确的解决方案是:

static final int[] a = new int[]{ 100,200 };

解决方案 D 不会自动初始化数组,因为类是由运行时加载的。它只是定义了一个静态方法(init),你必须在使用数组字段之前调用它。

【讨论】:

    【解决方案2】:

    D 定义了一个用于初始化a 的静态方法,但实际上并没有调用它。因此,a 保持未初始化状态,除非有人明确调用 init 方法。

    正如其他答案所指出的那样:D 甚至不应该编译,因为它试图为final 变量a 赋值。我想这是一个更正确的解释。尽管如此,即使 a 不是最终的 D,如果没有额外的代码,它仍然无法工作。

    我认为 D 中的new int[3] 是错字?其他三个都尝试创建一个长度为 2 的数组。

    【讨论】:

    • 你真的是正确的。我找到了答案 i Scjp。你的解释是正确的。不要介意投票
    【解决方案3】:

    D (4) 为假,因为 a) a 是最终的,您不能在 init 中分配它; b) 不保证会调用init; c) init 没有设置第三个元素;

    【讨论】:

    • 为什么这个世界被否决了?这个答案完全正确。
    • 我不是反对者,但我认为这并不完全正确。 c) 不正确,因为据我所知,new int[3] 将所有元素初始化为零。如果我错了,请纠正我。
    • @Sergey 你没有错,我把它作为旁注提到,因为我认为(如在某处提到的)new int[3]; 应该是int[2];。使 D 为 false 的主要原因是 a 是最终的。
    • sergey c 不正确。但不是因为你的原因。你可以初始化一个数组并且不提及维度的实际原因,或者你可以为一个数组创建一个特定的维度并在以后初始化它。但是你不能初始化一个数组并同时初始化它。无论如何感谢你的参与。Ratna 也提到了这一点
    【解决方案4】:

    for sn-p C 初始化时不能给出尺寸( Size ) 对于 sn-p D 你应该初始化最终变量。以后无法初始化。

    【讨论】:

      【解决方案5】:

      final 变量应该在构造函数调用完成之前初始化。由于“static void init()”是一种方法,它不会在构造函数之前运行,因此最终变量不会被初始化。因此这是一个编译时错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-28
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多