首页 新闻 会员 周边 捐助

不同语言的术语区别

0
[已关闭问题] 关闭于 2025-12-05 16:48

 Java 语言规范(JLS)怎么说?

JLS §8.3. Field Declarations 中,明确使用了:

FieldDeclaration:
{FieldModifier} Type VariableDeclaratorList ;

并举例: 

1int x =10;// field declaration with initializer2String name;// field declaration without initializer

✅ 所以:int x = 10; 被 JLS 称为 “field declaration”(字段声明),其中 = 10initializer(初始化器)

因此,“字段声明中的初始化”或“声明时初始化”是完全符合规范的说法。


2. Java 中有没有“纯声明” vs “定义”的区分?

没有。

  • C/C++ 中:

    • 声明(declaration):extern int x; → 告诉编译器“x 存在,但不在这里分配内存”
    • 定义(definition):int x = 10; → 分配内存 + 可选初始化
    • 一个变量可以被多次声明,但只能定义一次(ODR)
  • Java 中:

    • 所有字段写法(如 int x; 或 int x = 10;都是定义:它们在类加载/对象创建时分配存储空间。
    • 不存在“只声明不定义”的字段语法(除了接口中的 public static final 常量,但那属于特殊情况)。
    • 因此,Java 不区分“声明”和“定义”,统一称为 declaration

📌 换句话说:在 Java 中,“声明” ≈ “定义”,因为每次声明都会导致存储分配。

 

语言是否区分 declaration / definition?主要术语原因
C / C++ ✅ 严格区分 declaration(声明) vs definition(定义) 支持分离编译、链接,需明确符号存在性与存储分配
Java ❌ 不区分 统一叫 declaration(声明) 没有头文件,无链接阶段,所有“声明”都隐含定义
Python ❌ 无此概念 没有 declaration/definition 的区分 动态类型、运行时绑定,变量/属性在赋值时才“出现”

🔸 没有“提前告知”的机制

  • 你不能写“我声明一个叫 x 的整数,稍后再定义它”
  • 一切都在运行时决定(duck typing)

🐍 所以:Python 中既没有 declaration,也没有 definition —— 只有“绑定(binding)”或“赋值(assignment)”

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1258
提问于:2025-12-05 16:48
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册