类和对象 static

1:类是一个抽象的概念,而对象是类抽象概念的实物表达;

2:static修饰的变量或者方法在类加载的时候就会分配内存,其余的会在创建对象时候分配地址,与创建的对象无关,和类关联

static在java中主要有四种使用情况:成员变量、成员方法、代码块及内部类。

3:static属于类,在内存中只有一个副本(所有势力都指向同一个内存地址)。只要静态变量所在的类被加载,这个静态类就会被分配空间,因此就可以被使用。对静态变量的引用有两种方式,分别为“类.静态变量”和“对象.静态变量”。

实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,才能被使用,他在内存中存在多个副本,只能用“对象.静态变量”的方式来引用。

4:static的应用:单例模式的特点是该类只能有一个实例,为了实现这功能,必须隐藏类的构造方法,即把构造方法申明为private,并提供一个创建对象的方法。由于构造方法被申明为private,外界无法直接创建这个类型对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建

(1) static 代码块

static代码块在类中是独立与成员变量和成员函数的代码块,他不在任何一个方法体内,JVM在加载里的时候会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行,static代码块经常会被用来初始化静态变量,需要注意的是static代码块只会被执行一次。

(2)static内部类

static内部类是指被申明为static的内部类,他可以不依赖于外部类实例对象而被实例化,而通常的内部类需要外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态成员方法,只有内部类才能被申明为static

 

### C++ 中 `static` 关键字在对象中的使用 #### 局部静态变量 局部静态变量是在函数内部声明并带有 `static` 修饰符的变量。这变量在整个程序运行期间都存在,而不是像普通局部变量那样仅存在于函数调用期间。 ```cpp #include <iostream> void foo() { static int count = 0; ++count; std::cout << "foo() has been called " << count << " times." << std::endl; } int main() { foo(); foo(); foo(); } ``` 上述代码展示了如何利用 `static` 来保持计数器的状态,在每次调用 `foo()` 函数时增加计数值[^3]。 #### 的静态成员变量 对于而言,`static` 可以用来定义属于整个而非单个实例的数据成员或方法。这意味着所有此对象共享同一个静态数据成员副本;而静态成员函数则可以访问这些静态数据成员而不依赖于任何特定对象的存在。 ##### 定义与初始化 - **外部链接**:如果静态成员不是内联定义,则需在外围文件中单独定义。 ```cpp class MyClass { public: static int sharedValue; void setShared(int value) { sharedValue = value; } }; // 外部定义 int MyClass::sharedValue = 0; ``` 此处展示了一个简单的例子来说明这一点。注意,即使创建多个 `MyClass` 的实例,它们都将引用相同的 `sharedValue` 实例[^1]。 #### 静态成员函数 除了能够操作静态数据成员之外,静态成员函数也可以独立于具体的对象工作——也就是说,不需要通过某个对象去调用这个函数。这使得某些逻辑可以直接关联到本身上执行,比如工厂模式下的对象生成等功能。 ```cpp class Singleton { private: static Singleton* instance; protected: Singleton() {} public: static Singleton& getInstance() { if (instance == nullptr) instance = new Singleton(); return *instance; } // Prevent copy construction and assignment. Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; }; Singleton* Singleton::instance = nullptr; ``` 此段代码实现了经典的单件设计模式(Singleton Pattern),其中 `getInstance()` 是一个典型的静态成员函数的应用案例[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值