C++ 和 JAVA 的 static 关键字

2024 年 8 月 28 日 | 3 分钟阅读

在 C++ 中,关键字 static 用于赋予元素独特的属性。静态元素在程序生命周期内仅在静态存储区分配一次存储空间。它们在程序执行期间始终有效。以下是 static 关键字的示例:

  • 带有静态变量的函数
  • 静态类的对象
  • 保持不变的成员类变量
  • 类静态方法

Java 中的 static 关键字主要用于内存管理。static 关键字可以用于变量、方法、代码块和嵌套类。static 关键字与类关联,而不是与类的实例关联。

static 可以是以下几种情况:

  • 变量(也称为类变量)
  • 方法(也称为类方法)
  • 类层次结构

在 C++ 和 Java 中,static 关键字的功能几乎相同。然而,它们之间也存在一些区别。本文将比较和对比 C++ 和 Java 中的 static 关键字。

C++ 和 Java 中 static 关键字的相似之处

  • 两种语言都支持定义静态数据成员。
  • 两种语言都支持定义静态成员函数。
  • 无需创建任何对象即可轻松访问静态成员。

C++ 和 Java 中 static 关键字的区别

C++JAVA
C++ 不支持静态代码块。Java 提供了静态代码块(也称为静态子句)。它用于执行静态类初始化。
可以声明静态局部变量。静态局部变量不兼容。

以下几点将在下面详细讨论:

1) 静态数据成员: Java 中的静态数据成员,与 C++ 类似,是所有对象共享的类成员。例如,在下面的 Java 程序中,静态变量 count 用于计算创建的对象数量。

Java

输出

Total 2 objects created

2) 静态成员方法:在 C++ 和 Java 中都可以定义静态成员函数。静态方法是类成员,具有以下限制:

a. 只能使用静态方法。例如,以下程序的编译失败。fun() 是一个非静态函数,在静态 main() 中被调用。

Java

b. 它们只允许访问静态数据。

c. 它们无法访问 this 或 super。例如,以下程序的编译失败。

Java

d. 就像在 C++ 中一样,无需创建对象即可访问静态数据成员和静态方法。它们可以通过类名访问。例如,在以下程序中,静态数据成员 count 和静态方法 fun() 在不使用对象的情况下被访问。

Java

输出

Test.count = 0
Static fun() called

3) 静态代码块: 与 C++ 不同,Java 有一个特殊的代码块称为静态代码块(也称为静态子句),可用于静态类初始化。静态代码块中的代码只执行一次。有关更多信息,请参阅 Java 中的静态代码块。

4) 静态局部变量: 与 Java 不同,C++ 支持静态局部变量。例如,以下 Java 程序的编译失败。

Java