admin | 职业指南
Java 语言规范广泛指定并使用术语“声明”,但它不使用“定义”,除非它是一个普通的英文单词。
我的证据是,“声明”一词在 JLS 目录和索引中多次出现。相比之下,“定义”一词也没有出现在其中。
因此,当您看到有人在 Java 的上下文中使用“定义”这个词时,他们要么是在非技术意义上使用它,要么是在使用术语草率。
在后一种情况下,它们可能与技术术语“声明”具有相同的含义,或者它们可能具有其他含义。如果他们的意思是别的,你需要问他们是什么意思。如果他们已经定义了它......足够公平,但这不是标准术语。
声明“定义”是指初始化变量的点的答案特别不支持......在Java的上下文中。在 Java 中,变量的初始化要么发生在声明点,要么发生在以后的赋值中。在后一种情况下,除了赋值和/或初始化之外,没有使用或需要任何特殊术语。没有为变量分配存储空间的指定点。实际上,很可能变量本身的空间是在到达声明之前分配的。
JLS 规范中的 Java 中没有使用“定义”术语的原因是不需要它。
由于 Java 允许以任何顺序声明成员,因此不需要“前向声明”。这就是有必要区分这两个概念的上下文。
在 Java 中,变量所需的堆栈空间是编译时常量,因此堆栈偏移量计算发生在编译时。(请记住,在 Java 中,数组是对堆对象的引用......并且只有引用保存在堆栈帧中。)
Java 处理字段或变量的“定义而不初始化”的方式不需要单个“声明”点。如果需要对变量进行初始化,它可能发生在源代码中的多个位置。
(在 Java 中,他们可能使用声明与定义的唯一地方是抽象方法。除非他们这样做了,否则他们将不得不将常规方法声明称为定义......为了一致性......会令人困惑。所以他们只是将“抽象”子案例称为抽象方法的声明。)
C 和 C++ 处理这些事情的方式不同,因此在其技术描述中确实需要不同的“声明”和“定义”术语。我对“Sun Glossary”定义的看法是它们是以 C / C++ 为中心的。