Java类成员变量分为普通成员变量,final成员变量和静态成员变量。
一 、对于普通成员变量的初始化,可以分为以下几种。
1、在声明时赋值。例如 int x = 5;
2、在代码块或者类方法中赋值。 例如:
class Test {
int x; //声明时没有赋值
{
x = 6; //在代码块中赋值
}
Test() {
x = 7; //在构造函数中赋值
}
private void method() {
x = 8; //在一般方法中赋值
}
}
二 、 final成员变量
1、和普通成员变量一样,在声明时赋值。 例如 final int x = 5;
2、和普通成员变量一样,在代码块中、构造函数中赋值。但是不能在一般成员函数中赋值。
如果在代码块中赋值后,不能再在构造函数中赋值。这关系到java中代码执行顺序。
class Test {
final int x; //声明时没有赋值
{
x = 6; //在代码块中赋值
}
Test() {
x = 7; //在构造函数中赋值
}
}
三种赋值方法必须选取一种,否则将会产生编译错误。
三 、 静态成员变量
1、普通静态成员变量。 和普通成员变量类似,可以在声明时赋值,可以在静态代码块中赋值,也可以在静态方法中赋值,也可以在构造函数中赋值。
2、final静态成员变量。赋值只能在声明时和静态代码块中。构造函数中不能对静态final变量赋值。
请看一个完整的例子。
public class Parent {
final static int x = 0;
final static int y;
final int z;
static {
System.out.println("Static code");
y = 5;
//z = 6; //Cannot make a static reference to the non-static field z
}
final int a;
{
System.out.println("Dynamic code");
a = 3;
b = 4;
//System.out.println("b = " + b); //Cannot reference a field before it is defined
}
final int b;
//final static int c; //The blank final field c may not have been initialized
Parent() {
z = 6;
//c = 6; //The final field Parent.c cannot be assigned
System.out.println("Constructor code");
System.out.println("x = "+ x);
System.out.println("y = "+ y);
System.out.println("z = "+ z);
System.out.println("a = "+ a);
System.out.println("b = "+ b);
}
}