C++ 和Java中的Static关键字

C++ 和Java中的Static关键字

C++中,关键字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被用来计算创建的对象数量。

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

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

a. 只能使用静态方法。示例,以下程序无法编译通过。fun()是一个非静态函数,被调用于静态的main()函数中。

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

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

c. 他们无法访问this或super。示例,下面的程序编译失败。

class Base {
    static int x = 0;
}

class Derived extends Base {
    public static void fun()
    {

        // Compiler Error: non-static variable
        // cannot be referenced from a static context
        System.out.println( super.x );
    }
}

d. 就像在C++中一样,静态数据成员和静态方法可以在不创建对象的情况下访问。它们可以通过类名访问。示例,在下面的程序中,静态数据成员count和静态方法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();
    }
}

输出

Test.count = 0
Static fun() called

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

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

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

        // Compiler Error: Static local
        // variables are not allowed
        static int x = 10;
        return x--;
    }
}

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程