java静态成员变量与非静态成员变量初始化
时间: 2023-10-14 13:28:01 浏览: 64
Java中,静态成员变量和非静态成员变量在初始化时有所不同。
静态成员变量在类加载时进行初始化,且只会初始化一次。可以在声明时直接赋值,或者在静态代码块中进行赋值。
例如:
```
public class MyClass {
static int staticVar = 1;
int var = 2;
static {
staticVar = 3;
}
}
```
在这个例子中,静态成员变量`staticVar`在声明时被赋值为1,然后在静态代码块中被重新赋值为3。非静态成员变量`var`在对象创建时初始化,默认值为2。
非静态成员变量在对象创建时进行初始化,可以在声明时直接赋值,或者在构造函数中进行赋值。
例如:
```
public class MyClass {
static int staticVar = 1;
int var;
public MyClass() {
var = 2;
}
}
```
在这个例子中,静态成员变量`staticVar`在类加载时被初始化为1。非静态成员变量`var`在对象创建时被构造函数初始化为2。
相关问题
Java中静态成员与非静态成员之间的所有区别
Java中静态成员和非静态成员之间有以下的区别:
1. 内存分配:静态成员变量和方法在类加载时就会被分配到内存中,而非静态成员变量和方法则是在创建对象时才会被分配到内存中。
2. 调用方式:静态成员变量和方法可以直接通过类名调用,而非静态成员变量和方法只能通过对象名调用。
3. 生命周期:静态成员变量和方法的生命周期与类相同,而非静态成员变量和方法的生命周期与对象相同。
4. 共享性:静态成员变量和方法是类共享的,所有的对象都可以访问和修改它们,而非静态成员变量和方法则是对象私有的,每个对象都有自己的一份。
5. 初始化时间:静态成员变量和方法在类加载时就会被初始化,而非静态成员变量和方法则是在对象创建时才会被初始化。
6. 访问权限:静态成员变量和方法可以访问类的私有成员,而非静态成员变量和方法则不能访问类的私有成员。
7. 可见性:静态成员变量和方法对所有的对象都是可见的,而非静态成员变量和方法对其他对象是不可见的。
静态初始化块和非静态初始化块的区别
静态初始化块和非静态初始化块是Java中用于初始化类和对象的两种特殊代码块。
1. 静态初始化块:
- 静态初始化块使用关键字`static`修饰,用于初始化类的静态成员变量。
- 它在类加载时执行,只会执行一次。
- 静态初始化块不能访问实例成员变量,只能访问静态成员变量。
2. 非静态初始化块:
- 非静态初始化块没有使用任何修饰符,用于初始化实例成员变量。
- 它在实例对象创建时执行,每次创建对象都会执行一次。
- 非静态初始化块可以访问实例成员变量和静态成员变量。
总结:
- 静态初始化块用于初始化类的静态成员变量,只执行一次,不能访问实例成员变量;
- 非静态初始化块用于初始化实例成员变量,每次创建对象都执行,可以访问实例和静态成员变量。