为什么 java 不允许在方法中初始化静态变量?
Why java doesn't allow initializing static variable inside a method?
我知道c++在方法中支持静态变量,而在java中,静态成员在所有对象之间共享。但是为什么这段代码不能在java中编译呢?
class Learn
{
static int count = 0;
Learn(int n)
{
count+=n;
}
public void method()
{
static int count =0;
}
}
public class th
{
public static void main(String a[])
{
Learn l = new Learn(4);
}
}
不允许在方法内部初始化静态变量,因为变量初始化方法在方法调用后被销毁,并且静态变量不仅可以在方法外部访问,而且可以在类外部访问。
Java不允许您声明static
局部变量,例如您在method
中声明的count
。如果要初始化static
类变量,则在method
中替换
static int count =0;
count = 0;
在java中,在方法外部声明静态变量与在c++中在方法内部声明静态变量具有相同的效果。
我知道在c++中,在方法之外使用静态会给变量"文件作用域",但java是不同的。
如果需要几行代码来初始化变量,那么在类加载
时使用匿名静态方法初始化它。static {
count = 0;
}
与c++不同,Java不支持静态局部变量。因为在Java中,静态变量是一个类变量(对于整个类)。所有的方法都在类内声明,不可能在类外声明成员函数或任何变量。甚至main()方法也应该在类中。因此,如果我们使用静态局部变量(作用域限制为函数的变量),就违背了静态的目的。因此编译器不允许静态局部变量
相关文章:
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- "local scope"中的 C++ 初始化静态变量
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何从静态类函数初始化静态类对象
- C++:用IIFE线程初始化静态局部变量安全吗
- 如何在 c++ 中初始化静态类对象?
- 使用 lambda 初始化静态数组
- 使用 lambda 函数初始化静态数据成员
- 如何从 std::integer_sequence 初始化静态数组?
- 在构造函数中初始化静态函数指针
- C - 初始化静态成员的方法
- 大括号使用枚举类初始化静态常量unordered_map
- C++ main 函数中初始化静态变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何在运行时使用静态成员函数初始化静态成员变量
- 与其他静态const成员初始化静态常量成员