静态初始化块和非静态初始化块的区别
时间: 2023-09-12 10:04:20 浏览: 57
静态初始化块和非静态初始化块是Java中用于初始化类和对象的两种特殊代码块。
1. 静态初始化块:
- 静态初始化块使用关键字`static`修饰,用于初始化类的静态成员变量。
- 它在类加载时执行,只会执行一次。
- 静态初始化块不能访问实例成员变量,只能访问静态成员变量。
2. 非静态初始化块:
- 非静态初始化块没有使用任何修饰符,用于初始化实例成员变量。
- 它在实例对象创建时执行,每次创建对象都会执行一次。
- 非静态初始化块可以访问实例成员变量和静态成员变量。
总结:
- 静态初始化块用于初始化类的静态成员变量,只执行一次,不能访问实例成员变量;
- 非静态初始化块用于初始化实例成员变量,每次创建对象都执行,可以访问实例和静态成员变量。
相关问题
静态初始化和非静态初始化
静态初始化和非静态初始化是Java中两种不同的初始化方式。
静态初始化指的是在静态代码块中或者在声明变量时给变量赋初值,例如:
```java
public class MyClass {
// 静态初始化
static int x = 10;
static {
// 静态代码块
x = 20;
}
}
// 调用静态变量
int a = MyClass.x;
```
非静态初始化指的是在类的构造方法中或者在实例化对象时给变量赋初值,例如:
```java
public class MyClass {
// 非静态变量
int y;
{
// 非静态初始化
y = 10;
}
// 构造方法
public MyClass() {
// 非静态初始化
y = 20;
}
}
// 实例化对象
MyClass obj = new MyClass();
// 获取非静态变量
int b = obj.y;
```
总的来说,静态初始化是在类加载时执行的,而非静态初始化是在对象实例化时执行的。
使用powermockito,在单元测试方法中跳过非静态初始化块的java代码示例
您可以使用PowerMockito的`suppress()`方法来跳过非静态初始化块。下面是一个示例代码:
```java
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.junit.Test;
@PrepareForTest(YourClass.class)
public class YourTestClass {
@Test
public void testMethod() throws Exception {
// 使用suppress()方法跳过非静态初始化块
PowerMockito.suppress(PowerMockito.constructor(YourClass.class));
// 在这里执行你的测试代码
}
}
```
在上面的示例中,`YourClass`是你要测试的类。通过使用`@PrepareForTest`注解,告诉PowerMockito准备`YourClass`以进行测试。然后,使用`PowerMockito.suppress()`方法和`PowerMockito.constructor()`来跳过非静态初始化块。
请注意,为了使用PowerMockito,你需要将PowerMockito和相关的Mockito依赖项添加到你的项目中。