课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 静态变量一定要先声明后赋值
  • 静态变量一定要先声明后赋值

    发布:昆明Java培训      来源:达内新闻      时间:2016-09-30

  • 昆明Java培训的老师知道,这个标题是否像上一个建议的标题一样让人郁闷呢?什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们看一个例子,代码如下:

    1 public class Client32 {

    2    public static int i = 1;

    3

    4    static {

    5        i = 100;

    6    }

    7    public static void main(String[] args) {

    8        System.out.println(i);

    9    }

    10 }

    这段程序很简单,输出100嘛,对,确实是100,我们稍稍修改一下,代码如下:

    1 public class Client32 {

    2    static {

    3        i = 100;

    4    }

    5

    6    public static int i = 1;

    7

    8    public static void main(String[] args) {

    9        System.out.println(i);

    10    }

    11 }

    注意变量i的声明和赋值调换了位置,现在的问题是:这段程序能否编译?如过可以编译,输出是多少?还要注意,这个变量i可是先使用(也就是赋值)后声明的。

    答案是:可以编译,没有任何问题,输出结果为1。对,输出是1不是100.仅仅调换了位置,输出就变了,而且变量i还是先使用后声明的,难道颠倒了?

    这要从静态变量的诞生说起,静态变量是类加载时被分配到数据区(Data Area)的,它在内存中只有一个拷贝,不会被分配多次,其后的所有赋值操作都是值改变,地址则保持不变。我们知道JVM初始化变量是先声明空间,然后再赋值,也就是说:在JVM中是分开执行的,等价于:

    int i ; //分配空间

    i = 100; //赋值

    静态变量是在类初始化的时候首先被加载的,JVM会去查找类中所有的静态声明,然后分配空间,注意这时候只是完成了地址空间的分配,还没有赋值,之后JVM会根据类中静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行。对于程序来说,就是先声明了int类型的地址空间,并把地址传递给了i,然后按照类的先后顺序执行赋值操作,首先执行静态块中i = 100,接着执行i = 1,那最后的结果就是i =1了。

    哦,如此而已,如果有多个静态块对i继续赋值呢?i当然还是等于1了,谁的位置最靠后谁有最终的决定权。

    有些程序员喜欢把变量定义放到类最底部,如果这是实例变量还好说,没有任何问题,但如果是静态变量,而且还在静态块中赋值了,那这结果就和期望的不一样了,所以遵循Java通用的开发规范"变量先声明后赋值使用",是一个良好的编码风格。

    昆明Java培训的老师提醒大家注意:再次重申变量要先声明后使用,这不是一句废话。

    推荐文章

上一篇:在接口中不要存在实现代码

下一篇:不要覆写静态方法

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56