浏览 1755 次
锁定老帖子 主题:变量初始化的第三种方式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-24
1. 在宣告变量时初始化 2. 在构造函数里初始化 举例如下: public class VarTest { private int a=1; // 在宣告变量时初始化 private int b; public VarTest(){ b=1; //在构造函数里初始化 } } 但有一种很少用的变量初始化方式,这就是初始化板块(initialization block)举例如下: package com.torontohydro.test.lang; public class BlockInitVarTest { private int a=1; private int b; private int c; public BlockInitVarTest(){ b=1; System.out.println("b="+b); } //初始化板块 { c=1; System.out.println("a="+a); System.out.println("c="+c); } public static void main(String[] args){ new BlockInitVarTest(); new BlockInitVarTest();//再来一次,好吗 } } 输出结果如下: a=1 c=1 b=1 a=1 c=1 b=1 从这个结果可以看出变量初始化的顺序,宣告变量赋值最优先,然后是初始化板块,最后才是构造函数。这个结果还说明初始化板块在每次建立新的对象是都会被执行。 各位看官也许要问了,这个初始化板块怎么看着象脱裤子放屁啊?它能做的放在构建函数不是一样做吗?问得有理。确实没什么作用。不过且慢,让我们再看一下这个例子的变种: public class BlockInitVarTest { private int a=1; private int b; public static int c; public BlockInitVarTest(){ b=1; System.out.println("b="+b); } //初始化板块 { System.out.println("a="+a); } //静态初始化板块 static { c=1; System.out.println("c="+c); } public static void main(String[] args){ System.out.println("in main: c="+BlockInitVarTest.c); new BlockInitVarTest(); new BlockInitVarTest(); } } 输出结果如下: c=1 in main: c=1 a=1 b=1 a=1 b=1 通过将初始化板块静态化(static),我们将得到一个最优先执行的代码-在建立新对象之前就执行,而且只被执行一次。这在有些时候是很有用的。相信大家也常看到用到这种静态初始化板快。 谢谢各位! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |