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


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



目录
相关文章
|
16天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
15天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
20天前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
【4月更文挑战第6天】Java中的`synchronized`关键字用于处理多线程并发,确保共享资源的线程安全。它可以修饰方法或代码块,实现互斥访问。当用于方法时,锁定对象实例或类对象;用于代码块时,锁定指定对象。过度使用可能导致性能问题,应注意避免锁持有时间过长、死锁,并考虑使用`java.util.concurrent`包中的高级工具。正确理解和使用`synchronized`是编写线程安全程序的关键。
|
2天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
15 0
|
2天前
|
Java
两千字讲明白java中instanceof关键字的使用!
两千字讲明白java中instanceof关键字的使用!
11 0
|
3天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
7天前
|
安全 Java 开发者
Java并发编程:深入理解Synchronized关键字
【4月更文挑战第19天】 在Java多线程编程中,为了确保数据的一致性和线程安全,我们经常需要使用到同步机制。其中,`synchronized`关键字是最为常见的一种方式,它能够保证在同一时刻只有一个线程可以访问某个对象的特定代码段。本文将深入探讨`synchronized`关键字的原理、用法以及性能影响,并通过具体示例来展示如何在Java程序中有效地应用这一技术。
|
10天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
11天前
|
Java
Java关键字(1)
Java关键字(1)
|
17天前
|
编译器 C语言 C++
【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)
【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)