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

简介: 在 C++ 和 Java 中,Static 关键字的用途几乎相同。虽然有一些差异。这篇文章涵盖了 C++ 和 Java 中 static 关键字的异同。

「这是我参与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) 他们不能访问thissuper。例如,以下程序编译失败。


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--;
}
}
复制代码


如果大家发现任何不正确的地方,或者想分享有关上述主题的更多信息,请在下方评论。



目录
相关文章
|
21小时前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
2天前
|
Java C++
部落(pta)(并查集) Java以及C++
部落(pta)(并查集) Java以及C++
11 2
|
2天前
|
Java C++
愤怒的牛(java c++)(二分典型例子)
愤怒的牛(java c++)(二分典型例子)
8 1
|
2天前
|
算法 Java 数据安全/隐私保护
【Java开发指南 | 第二篇】标识符、Java关键字及注释
【Java开发指南 | 第二篇】标识符、Java关键字及注释
13 5
|
2天前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
57 2
|
2天前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
10 0
|
2天前
|
Java
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
7 0
|
2天前
|
编译器 C++
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
9 2
|
2天前
|
程序员 C++
为什么c++要引入class关键字
总之,C++引入 `class`关键字是为了支持面向对象编程,通过封装、继承、多态和抽象等特性,提供了更强大、灵活和可维护的编程工具,使得程序开发更加高效和可扩展。这使C++成为一种强大的编程语言,广泛用于各种应用领域。
32 1
|
2天前
|
存储 安全 Java
【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。