📅  最后修改于: 2020-03-29 08:10:43             🧑  作者: Mango
在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("总量 " + count + " 对象被创建");
}
}
输出:
总量 2 对象被创建
静态成员方法:与C++一样,声明为static的方法是类成员,并且具有以下限制:
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++一样,无需创建对象即可访问静态数据成员和静态方法,可以使用类名访问它们。例如,在以下程序中,无需任何对象即可访问静态数据成员count和静态方法fun()。
class Test {
static int count = 0;
public static void fun() {
System.out.println("静态fun()被调用");
}
}
class Main
{
public static void main(String arr[]) {
System.out.println("Test.count = " + Test.count);
Test.fun();
}
}
静态块:与C++不同,Java支持一种特殊的块,称为静态块(也称为static子句),可用于类的静态初始化。静态块中的此代码仅执行一次。有关详细信息,请参见Java中的静态块。
静态局部变量:与C++不同,Java不支持静态局部变量。例如,以下Java程序编译失败。
class Test {
public static void main(String args[]) {
System.out.println(fun());
}
static int fun() {
static int x= 10; //编译错误: Java不支持静态局部变量
return x--;
}
}