静态成员变量在什么时候创建
时间: 2023-06-10 12:04:23 浏览: 60
静态成员变量在程序运行期间只会被创建一次,在类被加载时就会被创建出来。即使没有类的实例被创建,静态成员变量也会被创建并分配内存。而且静态成员变量不随类的实例化而分配内存,而是在类加载时被分配内存。静态成员变量属于类,而不是属于类的实例。
相关问题
Java中静态成员变量加上final和不加final有什么区别
静态成员变量加上final和不加final的区别在于:
1. final修饰的静态成员变量是不可修改的,一旦被赋值后将无法再次更改其值,而没有final修饰的静态成员变量可以在任何时候被修改。
2. final修饰的静态成员变量在类加载时就会被初始化,并且只会被初始化一次,而没有final修饰的静态成员变量则会在每次创建类实例时被初始化。
3. final修饰的静态成员变量是线程安全的,因为它们在类加载时就已经被初始化,而没有final修饰的静态成员变量则需要额外的同步措施来保证线程安全。
什么时候用static修饰成员函数
当一个成员函数不需要访问类的非静态成员,也不需要通过类的实例来调用时,可以使用static修饰该成员函数。静态成员函数是属于类本身的,而不是属于类的实例,因此可以直接通过类名来调用,而不需要先创建类的实例。
使用static修饰的成员函数可以直接访问和修改静态成员变量,但不能访问非静态成员变量。此外,静态成员函数无法调用非静态成员函数,因为非静态成员函数需要通过类的实例来调用。
使用static修饰成员函数有以下几个常见的应用场景:
1. 作为工具函数:不依赖于类的实例和非静态成员的函数,可以声明为静态成员函数,方便在类外部直接通过类名调用。
2. 统计类的实例个数:可以使用静态成员函数来统计类的实例个数,通过在构造函数和析构函数中更新静态成员变量来实现。
3. 计算与类相关的某些值:某些与类相关的计算,不需要依赖于类的实例和非静态成员,可以声明为静态成员函数。
4. 作为回调函数:当静态成员函数需要作为回调函数传递给其他函数或类时,可以使用static修饰。
需要注意的是,静态成员函数没有this指针,因此无法访问非静态成员变量和非静态成员函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)