📜  C++和Java中static关键字的比较

📅  最后修改于: 2021-05-30 15:20:22             🧑  作者: Mango

在C++和Java, static关键字用于几乎相同的目的。虽然有一些区别。这篇文章涵盖了C++和Java中static关键字的异同。

静态数据成员:与C++一样, Java中的静态数据成员是类成员,并且在所有对象之间共享。例如,在下面的Java程序中,静态变量计数用于计数创建的对象数。

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++一样,声明为static的方法是类成员,并且具有以下限制:

1)他们只能调用其他静态方法。例如,以下程序编译失败。 fun()是非静态的,它在静态main()中被调用

class Main {
    public static void main(String args[]) {   
        System.out.println(fun());
    } 
    int fun() {
        return 20;
    } 
}

2)他们只能访问静态数据。

3)他们无法访问thissuper 。例如,以下程序编译失败。

class Base {
    static int x = 0;       
}   
  
class Derived extends Base 
{
   public static void fun() {
       System.out.println(super.x); // Compiler Error: non-static variable 
                                  // cannot be referenced from a static context
   }   
}

像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支持一种特殊的块,称为静态块(也称为static子句),可用于类的静态初始化。静态块中的此代码仅执行一次。有关详细信息,请参见Java的静态块。

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

class Test {
   public static void main(String args[]) { 
     System.out.println(fun());
   } 
   static int fun()  {
     static int x= 10; //Compiler Error: Static local variables are not allowed
     return x--;
   }
} 
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”