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


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



目录
相关文章
|
27天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
10天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
27天前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
2158 3
|
1月前
|
Java Android开发 C++
Java和C++
Java和C++
47 15
|
2月前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
62 9
|
2月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
62 8
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
128 5
|
1月前
|
安全 编译器 C++
C++ `noexcept` 关键字的深入解析
`noexcept` 关键字在 C++ 中用于指示函数不会抛出异常,有助于编译器优化和提高程序的可靠性。它可以减少代码大小、提高执行效率,并增强程序的稳定性和可预测性。`noexcept` 还可以影响函数重载和模板特化的决策。使用时需谨慎,确保函数确实不会抛出异常,否则可能导致程序崩溃。通过合理使用 `noexcept`,开发者可以编写出更高效、更可靠的 C++ 代码。
39 0
|
2月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
52 4
WK
|
2月前
|
安全 Java 编译器
C++和Java哪个更好用
C++和Java各具优势,选择取决于项目需求、开发者偏好及目标平台特性。C++性能出色,适合游戏、实时系统等;Java平台独立性强,适合跨平台、安全敏感应用。C++提供硬件访问和灵活编程范式,Java有自动内存管理和丰富库支持。两者各有千秋,需根据具体需求选择。
WK
66 1