Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我需要`{…}`来填充类作用域中的数组?_Java - Fatal编程技术网

Java 为什么我需要`{…}`来填充类作用域中的数组?

Java 为什么我需要`{…}`来填充类作用域中的数组?,java,Java,下面的程序有什么问题 package test; public class Test { byte[] array = new byte[2]; array[0] = 'A'; array[1] = 'B'; } 看,IDE显示了一些问题单击放大: 换句话说,我为什么要将填充行移动到另一个内部范围,如下所示: package test; public class Test { byte[] array = new byte[2]; {

下面的程序有什么问题

package test;

public class Test {

    byte[] array = new byte[2];
    array[0] = 'A';
    array[1] = 'B';
}
看,IDE显示了一些问题单击放大:

换句话说,我为什么要将填充行移动到另一个内部范围,如下所示:

package test;

public class Test {

    byte[] array = new byte[2];
    {
        array[0] = 'A';
        array[1] = 'B';
    }
}

IDE对上述程序没有任何问题。

在这段代码中,您尝试对数组进行一些赋值:例如,数组[0]='A'在任何方法之外

public class Test {
    byte[] array = new byte[2];
    array[0] = 'A';
    array[1] = 'B';
}
而在这个代码段中,您在实例初始值设定项块中进行赋值

public class Test {
    byte[] array = new byte[2];
    {
        array[0] = 'A';
        array[1] = 'B';
    }
}
如果您想在代码中这样做,您可以在init方法中这样做

public class Test {
    byte[] array = new byte[2];

    void initArray() {
        array[0] = 'A';
        array[1] = 'B';
    }
}

在这个代码段中,您尝试对数组进行一些赋值:例如,数组[0]=“A”在任何方法之外

public class Test {
    byte[] array = new byte[2];
    array[0] = 'A';
    array[1] = 'B';
}
而在这个代码段中,您在实例初始值设定项块中进行赋值

public class Test {
    byte[] array = new byte[2];
    {
        array[0] = 'A';
        array[1] = 'B';
    }
}
如果您想在代码中这样做,您可以在init方法中这样做

public class Test {
    byte[] array = new byte[2];

    void initArray() {
        array[0] = 'A';
        array[1] = 'B';
    }
}
您的示例中的{…}被调用。它们用于设置最终静态变量的值,而构造函数不能。在不需要它们的情况下,可以在构造函数中初始化数组

没有初始值设定项它就不能工作的原因是它根本不是有效的java语法

有关更多信息,请参见和

调用示例中的{…}。它们用于设置最终静态变量的值,而构造函数不能。在不需要它们的情况下,可以在构造函数中初始化数组

没有初始值设定项它就不能工作的原因是它根本不是有效的java语法

另请参见和,以获取更多信息与使用实例初始值设定项块相比,您可以在整洁的一行程序中执行所需操作,如下所示:

// much better, and much smaller
public class Test {
    byte[] array = {'A', 'B'};
}
与使用实例初始值设定项块不同,您可以在整洁的单行程序中执行所需操作,如下所示:

// much better, and much smaller
public class Test {
    byte[] array = {'A', 'B'};
}

数组[0]=“A”;您不是在初始化新变量,而是在填充现有数组。我不是一个Java导出者,但我并不惊讶于你不能在类描述中作为一个新的初始化来完成它。IDE的屏幕截图是一种分享代码的糟糕方式。试着在你的IDE中找一个地方,例如,编译器输出窗口,在那里你可以抓取错误消息作为文本包含在你的问题中。。。因为JLS是这样定义的。您可以查看JLS 8.1.6-。另外,作为旁注,您可以在这里简单地使用一个有效的数组初始值设定项,即byte[]array={'a','B'}@AndrewJanke我在其他任何地方都看不到这种错误消息。在编译器输出窗口中,我只能看到编译时间errors@Abraham这是一个编译时错误,就像所有语法错误一样。IDE只是在后台进行部分编译,因此它可以为您提供语法建议。手动告诉它对文件或项目进行完整构建,您应该在控制台输出或类似窗口中看到错误。这些工具栏按钮中的一个,或者菜单项可能位于Project或File下,或者右键单击Package Explorer中的类而获得的上下文菜单中的一个项,都应该这样做;您不是在初始化新变量,而是在填充现有数组。我不是一个Java导出者,但我并不惊讶于你不能在类描述中作为一个新的初始化来完成它。IDE的屏幕截图是一种分享代码的糟糕方式。试着在你的IDE中找一个地方,例如,编译器输出窗口,在那里你可以抓取错误消息作为文本包含在你的问题中。。。因为JLS是这样定义的。您可以查看JLS 8.1.6-。另外,作为旁注,您可以在这里简单地使用一个有效的数组初始值设定项,即byte[]array={'a','B'}@AndrewJanke我在其他任何地方都看不到这种错误消息。在编译器输出窗口中,我只能看到编译时间errors@Abraham这是一个编译时错误,就像所有语法错误一样。IDE只是在后台进行部分编译,因此它可以为您提供语法建议。手动告诉它对文件或项目进行完整构建,您应该在控制台输出或类似窗口中看到错误。其中一个工具栏按钮,或者菜单项可能位于Project或File下,或者右键单击Package Explorer中的类而获得的上下文菜单中的一个项,都应该这样做。因此,答案是:我的第一个代码段是错误的,因为Java语言的定义方式是我们无法在类范围内以这种方式将值分配给数组元素,我们必须将这些赋值移到方法或实例初始值设定项块内,即{…}?。正当我还可以使用byte[]数组={'A','B'};instead@Abraham你的假设完全正确。在一行字节[]数组={'A','B'}中进行声明和赋值;是简单赋值的常用方法。@vikingsteve静态初始值设定项块没有示例。其用途取决于具体情况。但我同意,如果
另一种方法更适合避免:长时间初始化、初始化havy weight对象等。因此,答案是:我的第一个片段是错误的,因为Java语言的定义方式是,我们不能在类范围内以这种方式将值分配给数组元素,我们必须将这些赋值移到方法或实例初始值设定项块内,即{…}?。正当我还可以使用byte[]数组={'A','B'};instead@Abraham你的假设完全正确。在一行字节[]数组={'A','B'}中进行声明和赋值;是简单赋值的常用方法。@vikingsteve静态初始值设定项块没有示例。其用途取决于具体情况。但我同意,如果另一种方法更适合避免,则不应过度使用:长时间初始化、初始化权重过大的对象等。请尽可能不要使用静态初始化程序块。。他没有使用,所以一切都很好。请阅读:看看静态初始值设定项块和实例初始值设定项块之间的区别。请尽可能不要使用静态初始值设定项块。。他没有使用,所以一切都正常。请阅读以下内容:看看静态初始值设定项块和实例初始值设定项块之间的区别。