Java中的声明和定义有什么区别?
我对这两个术语感到非常困惑。我检查了stackoverflow,C++有一个类似的问题,但不是java。
有人可以解释java的两个术语之间的区别吗?
我对这两个术语感到非常困惑。我检查了stackoverflow,C++有一个类似的问题,但不是java。
有人可以解释java的两个术语之间的区别吗?
概念上的区别很简单:
声明:您正在声明某些内容存在,例如类、函数或变量。你没有说任何关于这个类或函数是什么样子的,你只是说它存在。
定义:你定义一些东西是如何实现的,比如一个类、一个函数或变量,也就是说,你说出它到底是什么。
在Java中,两者之间几乎没有区别,正式地说,声明不仅包括标识符,还包括它的定义。以下是我个人对这些术语的详细解释:
类:Java并不像C++那样真正分离声明和定义(在头文件和cpp文件中)。您可以在声明它们时定义它们。
函数:当你编写一个接口(或一个抽象类)时,你可以说你正在声明一个函数,而不定义它。但是,普通函数始终在声明它们的位置定义。如果您愿意,请参阅函数的主体作为其定义。
变量:变量声明可能如下所示:
int x;
(您正在声明变量存在并且具有类型 ),如果它是局部变量或成员字段。在Java中,除了它可能要包含的值之外,没有关于定义的信息,这些值由对它的赋值决定。x
int
x
以下是我如何使用这些术语的粗略摘要:
abstract class SomeClass { // class decl.
// \
int x; // variable decl. |
// |
public abstract void someMethod(); // function decl. |
// |
public int someOtherMethod() { // function decl. |
// | class
if (Math.random() > .5) // \ | def.
return x; // | function definition |
else // | |
return -x; // / |
// |
} // |
} // /
Java语言规范广泛地指定并使用术语“声明”,但它不使用“定义”,除非作为一个普通的英语单词。
我的证据表明,术语“声明”在JLS目录和索引中多次出现。相比之下,“定义”一词也没有出现在其中。
因此,当你看到有人在Java的上下文中使用“定义”这个词时,他们要么是在非技术意义上使用它,要么是他们的术语草率。
在后一种情况下,它们的含义可能与技术术语“声明”相同,或者它们可能意味着其他含义。如果他们的意思是别的,你需要问他们他们是什么意思。如果他们定义了它...很公平,但它不是标准术语。
声明“定义”是指变量初始化点的答案是特别不支持的......在Java的上下文中。在Java中,变量的初始化要么发生在声明点,要么在以后的赋值中发生。在后一种情况下,没有使用特殊术语...或需要...除了分配和/或初始化。没有为变量分配存储的指定点。实际上,变量本身的空间很可能在到达声明之前分配。
在JLS规范的Java中不使用“定义”术语的原因是不需要它。
(在Java中,他们可能使用声明与定义的唯一地方是在抽象方法中。除了如果他们这样做了,他们将不得不参考常规方法声明作为定义......为了保持一致性...那会令人困惑。所以他们只是将“抽象”子案例称为抽象方法的声明。
C和C++以不同的方式处理这些事情,因此在其技术描述中确实需要不同的“声明”和“定义”术语。我对“太阳术语表”定义的看法是,它们是以C / C++为中心的。