Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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中声明整数数组的不同方法,一种有效,一种无效';t、 为什么??_Java_Arrays - Fatal编程技术网

我有以下两种在Java中声明整数数组的不同方法,一种有效,一种无效';t、 为什么??

我有以下两种在Java中声明整数数组的不同方法,一种有效,一种无效';t、 为什么??,java,arrays,Java,Arrays,以下是声明的第一种方式,它起了作用: static final int N = 9; public static int[] arr = new int[N]; 这是一个没有: static final int N = 9; int arr[]; //declaring array arr = new int[N]; // allocating memory to array Eclipse在第二行给了我一个错误提示,我不太明白: 令牌“;”上出现语法错误,应为 感谢您花时间阅读我的

以下是声明的第一种方式,它起了作用:

static final int N = 9;
public static int[] arr = new int[N];
这是一个没有:

static final int N = 9;
int arr[];    //declaring array
arr = new int[N];  // allocating memory to array
Eclipse在第二行给了我一个错误提示,我不太明白: 令牌“;”上出现语法错误,应为


感谢您花时间阅读我的问题,任何建议都将不胜感激。

在您的第一个示例中的
public
关键字中,我猜这会直接出现在类定义中


arr=newint[N]
是可执行代码,可执行代码不能直接出现在类定义中。根据它是否需要是
静态的
,您必须将它放在构造函数中或构造函数中。

正如我在初始注释中提到的,您可以在初始化块(或构造函数)中使用该语法。像

public class MyClass {
    static final int N = 9;
    int arr[];    //declaring array
    public MyClass() {
        super();
        arr = new int[N];  // allocating memory to array
    }
}

请注意,这里的两个示例的字节码实际上是相同的。初始化块(和语句)由编译器复制到构造函数中(包括默认构造函数)——基本上如图所示。

哪部分不清楚?第一个是合法的Java。第二个是不合法的。具体来说,
arr=newint[N]不在构造函数、方法或初始化块中。另外,
int-arr[]
不是
静态的
最终的
(但在第一个示例中,
arr
不一定是
静态的
最终的
。@ElliottFrisch感谢您的建议。我从一个教程网站上学到了第二部分。我想知道在什么情况下我可以使用“arr=newint[N];”来声明数组?谢谢!它们出现在类定义中,我将查看您建议的解决方法。
public class MyClass {
    static final int N = 9;
    int arr[];    //declaring array
    public MyClass() {
        super();
        arr = new int[N];  // allocating memory to array
    }
}