1、用非静态初始化块初始化非静态变量
class TryInitialization
{
int[] values = new int[10]; //Static array member
//Initialization block
//static
{
System.out.println("Running initialization block.");
for (int i = 0; i < values.length; i++)
values[i] = (int)(100.0 * Math.random());
}
//List values in the array for an object
void listValues()
{
System.out.println(); //Start a new line
for (int i = 0; i < values.length; i++)
System.out.print(" " + values[i]); //Display values
System.out.println(); //Start a new line
}
public static void main(String[] args)
{
TryInitialization example1 = new TryInitialization();
System.out.println("/nFirst object:");
example1.listValues();
TryInitialization example2 = new TryInitialization();
System.out.println("/nSecond object:");
example2.listValues();
example1.listValues();
}
}
运行结果为:
Running initialization block.
First object:
24 59 34 10 6 46 92 50 54 0
Running initialization block.
Second object:
82 14 39 11 57 69 1 96 0 15
24 59 34 10 6 46 92 50 54 0
2、用静态初始化块初始化静态变量
即把
int[] values = new int[10]; //Static array member
//Initialization block
{
System.out.println("Running initialization block.");
for (int i = 0; i < values.length; i++)
values[i] = (int)(100.0 * Math.random());
}
改成
static int[] values = new int[10]; //Static array member
//Initialization block
static
{
System.out.println("Running initialization block.");
for (int i = 0; i < values.length; i++)
values[i] = (int)(100.0 * Math.random());
}
运行结果为:
Running initialization block.
First object:
41 29 51 25 84 1 70 18 47 23
Second object:
41 29 51 25 84 1 70 18 47 23
41 29 51 25 84 1 70 18 47 23
3、用非静态初始化块初始化静态变量
即改成
static int[] values = new int[10]; //Static array member
//Initialization block
{
System.out.println("Running initialization block.");
for (int i = 0; i < values.length; i++)
values[i] = (int)(100.0 * Math.random());
}
运行结果为
First object:
94 51 83 56 80 42 84 38 85 48
Running initialization block.
Second object:
51 30 58 13 11 76 98 23 42 34
51 30 58 13 11 76 98 23 42 34
4、用静态初始化块初始化非静态变量
即改成
int[] values = new int[10]; //Static array member
//Initialization block
static
{
System.out.println("Running initialization block.");
for (int i = 0; i < values.length; i++)
values[i] = (int)(100.0 * Math.random());
}
编译错误
TryInitialization.java:9: non-static variable values cannot be referenced from a
static context
for (int i = 0; i < values.length; i++)
^
TryInitialization.java:10: non-static variable values cannot be referenced from
a static context
values[i] = (int)(100.0 * Math.random());
^
2 errors