java静态成员变量与非静态成员变量初始化
时间: 2023-10-14 19:28:01 浏览: 252
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. 可见性:静态成员变量和方法对所有的对象都是可见的,而非静态成员变量和方法对其他对象是不可见的。
创建一个类名为Parent的父类,在Parent类中声明一个静态字符串变量并进行初始 化,声明一个非静态的字符串成员变量并进行初始化,在非静态块中输出非静态变量的值, 在静态块中输出静态变量的值,声明
创建一个名为`Parent`的父类,可以按照以下步骤进行:
```java
// Parent类定义
public class Parent {
// 静态字符串变量,静态变量属于类而不是对象
private static String staticVariable = "This is a static string";
// 非静态字符串成员变量,每个对象都有自己的副本
private String nonStaticVariable = "This is a non-static string";
// 静态块,只执行一次,通常用于初始化静态资源
static {
System.out.println("Static block - Value of staticVariable: " + staticVariable);
}
// 非静态块,随着对象的实例化而执行,通常用于初始化非静态成员
{
System.out.println("Non-static block - Value of nonStaticVariable: " + nonStaticVariable);
}
// 父类的方法或其他定义可以放在这里...
}
```
在这个例子中,当你创建`Parent`类的对象时,它会自动执行静态块和非静态块。静态块会在类加载时运行,而非静态块则会在实例化对象时运行。
阅读全文