我对这两个词感到非常困惑。我检查了stackoverflow,对于C ++有一个类似的问题,但对于Java没有。
有人可以解释一下Java的两个术语之间的区别吗?
我对这两个词感到非常困惑。我检查了stackoverflow,对于C ++有一个类似的问题,但对于Java没有。
有人可以解释一下Java的两个术语之间的区别吗?
Answers:
概念上的区别很简单:
声明:您声明的是某些东西,例如类,函数或变量。你不说任何事情什么是类或函数的样子,你刚才说,它的存在。
定义:您定义某种事物的实现方式,例如类,函数或变量,即您说的是实际的东西。
在Java中,两者之间几乎没有什么区别,从形式上来说,声明不仅包括标识符,还包括其定义。这是我个人详细解释这些术语的方式:
类:Java并没有像C / C ++那样将声明和定义真正分开(在标头和cpp文件中)。您在声明它们的位置定义它们。
函数:编写接口(或抽象类)时,可以说是在声明函数而不定义它。但是,普通功能始终在声明它们的位置定义。如果愿意,请参见函数主体作为其定义。
变量:变量声明如下所示:
int x;
(您声明一个变量x存在并且具有type int),无论它是局部变量还是成员字段。在Java中,除了定义可能保留的值(由分配给它的值)以外,没有其他信息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; // / |
// |
} // |
} // /
javac,类声明似乎是类定义的同义词。考虑一下public void visitClassDef(JCClassDecl tree)。
Java语言规范广泛地指定和使用了术语“声明”,但是除作为常规英语单词外,它不使用“定义”。
我的证据是,“声明”一词在JLS目录和索引中多次出现,但“定义”一词均未出现。
因此,当您看到有人在Java上下文中使用“定义”一词时,他们要么是在非技术意义上使用它,要么是他们的术语草率。
在后一种情况下,它们可能与技术术语“声明”具有相同的含义,或者可能具有其他含义。如果它们还有其他含义,则需要询问他们的含义。如果他们已经定义了它……足够公平,但这不是标准术语。
在Java上下文中,明确指出“定义”是指变量被初始化的点的答案。在Java中,变量的初始化要么在声明时发生,要么在以后的赋值中发生。在后一种情况下,除了赋值和/或初始化外,没有或不需要使用特殊术语。没有为该变量分配存储的指定点。确实,有可能在声明到达之前就为变量本身分配了空间。
JLS规范中的Java中未使用“定义”术语的原因是不需要该术语。
(在Java中,他们可能使用声明或定义的唯一位置是抽象方法。除非这样做了,否则必须将常规方法声明作为定义使用...以获得一致性...并且因此,他们只是将“抽象”子案例称为抽象方法的声明。)
C和C ++处理这些事情的方式不同,因此在技术说明中确实需要不同的“声明”和“定义”术语。我对“ Sun词汇表”的定义是,它们以C / C ++为中心。
从Sun词汇表的定义中:
声明:
一种声明,用于建立标识符并将其与属性相关联,而不必保留其存储(用于数据)或提供实现(用于方法)。
定义: 保留(用于数据)或提供实现(用于方法)的声明。
我阅读Sun词汇表的方式如下:
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
1.声明表示创建一个primitive or Object reference variable,但没有分别分配值或对象。
例如:
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2.定义是当我们为它们分配值或对象时。
int x = 5;
Cat myCat = new Cat();
3.如果是方法,则如下所示...
public abstract void go(); // Method Declaration (Abstract method)
public void go(){ // Method Defination
// Your code
}
我想我可以更好地解释这个问题,例如:
考虑以下情形:
您的公司中有一个空缺的软件工程师职位。这意味着您将选择担任该职位的人员将是软件工程师(您不能为此职位选择营销人员)。因此,创建此帖子类似于声明。
现在,当您定义此职位的人可以/不能做什么,他拥有的权限,他的限制是什么时,这就是定义。
所以说
SoftwareEngineer se;
指声明;
和
class SoftwareEngineer {
// define role and responsibilities
}
表示定义。希望对您有帮助。
声明:一种声明,用于建立标识符并将其与属性相关联,而不必保留其存储(用于数据)或提供实现(用于方法)。
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
definition(定义):保留存储(用于数据)或提供实现(用于方法)的声明。
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference