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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值