关于使用初始化块初始化变量的几种情况的运行结果分析

来源:互联网 发布:淘宝运营怎么收费 编辑:程序博客网 时间:2024/06/05 00:11

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

原创粉丝点击