C++,java,python对比学习记录(7)static

在Java和C++中,static 关键字有不同的用法和含义:

在 Java 中:

  1. 静态变量 (Static Variables):

    • 在类级别声明的变量,被所有实例共享。
    • 可以通过类名直接访问,如 ClassName.variableName
  2. 静态方法 (Static Methods):

    • 与类相关联,而不是与实例相关联的方法。
    • 可以通过类名直接调用,如 ClassName.methodName()
  3. 静态块 (Static Blocks):

    • 在类加载时执行的静态代码块。
    • 用于初始化静态变量或执行一些静态初始化操作。
  4. 静态内部类 (Static Inner Classes):

    • 声明为静态的内部类。
    • 可以直接通过外部类名访问,如 OuterClass.StaticInnerClass

在 C++ 中:

  1. 静态成员变量 (Static Member Variables):

    • 类的所有对象共享的变量。
    • 在类声明中声明,但通常需要在类外部初始化。
  2. 静态成员函数 (Static Member Functions):

    • 不依赖于任何对象的类成员函数。
    • 可以直接通过类名调用,如 ClassName::methodName()
  3. 静态局部变量 (Static Local Variables):

    • 在函数内部声明的静态变量。
    • 生命周期跨越函数调用,但作用域仅限于声明的函数。
  4. 静态数据成员 (Static Data Members):

    • 与类相关联的静态数据,通常在类外初始化。

总体来说,无论在 Java 还是 C++ 中,static 关键字都用于定义与类或函数相关的静态成员或变量,其主要特征是它们不依赖于类的实例化而可以直接访问或调用。
——————————————————————————
在Java中,静态块(Static Blocks)是一种用于类的静态初始化的特殊块。它们由 static 关键字修饰,并且在类加载时执行,且仅执行一次。静态块通常用于初始化静态变量或执行其他静态初始化操作,例如加载驱动程序、初始化静态数据等。

静态块的语法如下:

static {
    // 静态块中的代码
}

静态块可以有多个,并且它们的执行顺序与它们在类中出现的顺序一致。这些块在类第一次被加载时执行,且仅执行一次,即使没有创建类的实例。示例如下:

public class MyClass {
    static {
        System.out.println("Static block 1");
    }

    static {
        System.out.println("Static block 2");
    }

    public static void main(String[] args) {
        // 主方法,类被加载时静态块会执行
        System.out.println("Main method");
    }
}

在上面的例子中,当 MyClass 类被加载时,会依次执行两个静态块,输出如下:

Static block 1
Static block 2
Main method

静态块的主要用途包括:

  • 初始化静态变量,特别是在其值需要计算或从外部源加载的情况下。
  • 执行静态资源的初始化,如数据库连接、加载驱动程序等。
  • 执行只需要在类加载时执行一次的操作。

————————————————————————————
在 Java 中,static import 是一种特性,它允许在不使用类名限定的情况下直接使用类的静态成员(方法或变量)。例如,可以这样使用静态导入:


import static java.lang.Math.*;

public class MyClass {
    public static void main(String[] args) {
        double result = sqrt(25); // 直接使用静态方法 sqrt,而不需要 Math.sqrt
        System.out.println("Square root of 25: " + result);
    }
}

尽管静态导入提供了一种简化代码的方式,但在实际使用中,通常不建议滥用静态导入
————————————————————————————————

Python

在 Python 中,与 Java 或 C++ 中的 static 关键字类似的概念是通过装饰器和类级别的定义来实现的,并没有直接的 static 关键字。

在 Python 中实现类似 static 的功能有几种方式:

  1. 类方法 (Class Methods):

    • 使用 @classmethod 装饰器来定义类方法,类方法可以通过类名或实例调用,并且可以访问类级别的属性和方法。
    class MyClass:
        class_variable = 10
    
        @classmethod
        def class_method(cls):
            print("Class method called")
            print(cls.class_variable)
    
    # 调用类方法
    MyClass.class_method()
    
  2. 静态方法 (Static Methods):

    • 使用 @staticmethod 装饰器来定义静态方法,静态方法与类的实例无关,也无法访问实例变量。它们通常用于实现与类相关的工具函数。
    class MyClass:
        @staticmethod
        def static_method():
            print("Static method called")
    
    # 调用静态方法
    MyClass.static_method()
    
  3. 类变量 (Class Variables):

    • 在类级别定义的变量,被所有实例共享。
    class MyClass:
        class_variable = 10
    
    # 访问类变量
    print(MyClass.class_variable)
    

这些方法允许在 Python 中实现类似静态方法和静态变量的功能,虽然没有像 Java 或 C++ 中的 static 关键字那样的直接支持,但通过装饰器和类级别的定义,可以达到相似的效果。

  • 44
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值