Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Runtime_Compile Time - Fatal编程技术网

Java 爪哇教科书:“;数组的大小必须在编译时已知;

Java 爪哇教科书:“;数组的大小必须在编译时已知;,java,arrays,runtime,compile-time,Java,Arrays,Runtime,Compile Time,我只是浏览了一下我的一本旧教科书,发现了这篇用Java定义数组的文章: 一维数组是由 有序齐次元素的有限、固定大小集合 可以直接进入。Finite表示存在最后一个 元素。固定大小意味着数组的大小必须在 编译时,但这并不意味着数组中的所有插槽 必须包含有意义的值 我对数组有一个基本的了解,并且可以在日常任务中使用它们,但是对于数组的大小必须在编译时知道这一说法,我感到非常困惑 一个非常简单的Java程序演示了可以在运行时以可变大小实例化数组: import java.util.Scanner;

我只是浏览了一下我的一本旧教科书,发现了这篇用Java定义数组的文章:

一维数组是由 有序齐次元素的有限、固定大小集合 可以直接进入。Finite表示存在最后一个 元素。固定大小意味着数组的大小必须在 编译时,但这并不意味着数组中的所有插槽 必须包含有意义的值

我对数组有一个基本的了解,并且可以在日常任务中使用它们,但是对于数组的大小必须在编译时知道这一说法,我感到非常困惑

一个非常简单的Java程序演示了可以在运行时以可变大小实例化数组:

import java.util.Scanner;

public class test
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter a number: ");
      int size = scan.nextInt();
      int[] array = new int[size];
      System.out.println("You just create an array of size " + array.length);
   }
}
这将编译、执行并顺利完成


有什么好处?

这是一个措词非常糟糕的段落,但如果你理解得松散一些,它是正确的

在您的示例中,数组的大小在编译时已知。大小为
size

您将“编译时已知”解释为“静态”或“常量”,这是可以理解的。当然,正如我们所知,JVM根据
size
的值动态分配内存


作者可能试图区分数组和类似于
ArrayList的东西,在初始化时不必指定维度。

这里数组的大小是“size”。编译器并不关心“大小”中可能包含的内容。内存不是在编译时分配的,而是在运行时分配的。在编译时,不会直接检查变量以获取其值。只有在运行时,编译器才能看到“大小”中的内容并分配内存

你能在这本教科书上发布更多信息吗(链接、作者、名字)?我必须说作者在这里给出了非常不准确的定义。OP有一个非常合理的批评。我只想说作者错了,或者他的措辞没有正确表达他的想法。当我们说数组大小在编译时已知时,我们谈论的是类似于case的(旧的)C/C++这本书是Dale、Joyce和Weems的《使用Java的面向对象数据结构》(第一版)。这一段在第90页。