「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
在 C++ 和 Java 中,Static 关键字的用途几乎相同。虽然有一些差异。这篇文章涵盖了 C++ 和 Java 中 static 关键字的异同。
静态数据成员: 与 C++ 一样,Java 中的静态数据成员是类成员,并在所有对象之间共享。例如,在下面的Java程序中,静态变量count用于统计创建的对象数量。
class Test { static int count = 0; Test() { count++; } public static void main(String arr[]) { Test t1 = new Test(); Test t2 = new Test(); System.out.println("Total " + count + " objects created"); } } 复制代码
输出:
Total 2 objects created 复制代码
静态成员方法: 与 C++ 一样,声明为静态的方法是类成员,并具有以下限制:
1) 它们只能调用其他静态方法。例如,以下程序编译失败。fun() 是非静态的,它在静态 main() 中调用
class Main { public static void main(String args[]) { System.out.println(fun()); } int fun() { return 20; } } 复制代码
2) 他们只能访问静态数据。
3) 他们不能访问this或super。例如,以下程序编译失败。
class Base { static int x = 0; } class Derived extends Base { public static void fun() { System.out.println(super.x); } } 复制代码
与 C++ 一样,可以在不创建对象的情况下访问静态数据成员和静态方法。可以使用类名访问它们。例如,在下面的程序中,静态数据成员计数和静态方法 fun() 是在没有任何对象的情况下访问的。
class Test { static int count = 0; public static void fun() { System.out.println("Static fun() called"); } } class Main { public static void main(String arr[]) { System.out.println("Test.count = " + Test.count); Test.fun(); } } 复制代码
静态块: 与 C++ 不同,Java 支持一个特殊的块,称为静态块(也称为静态子句),可用于类的静态初始化。静态块中的这段代码只执行一次。有关详细信息,请参阅Java 中的静态块。
静态局部变量: 与 C++ 不同,Java 不支持静态局部变量。例如,以下 Java 程序编译失败。
class Test { public static void main(String args[]) { System.out.println(fun()); } static int fun() { static int x= 10; return x--; } } 复制代码
如果大家发现任何不正确的地方,或者想分享有关上述主题的更多信息,请在下方评论。