Java中有关变量初始化先后顺序的思考和实验(二)
来源:互联网 发布:如何修改淘宝账号名称 编辑:程序博客网 时间:2024/05/16 01:44
三、多种初始化过程的先后顺序
上一篇文章中已经说明,初始化过程分为:默认初始化、显示初始化、构造代码块初始化和构造函数初始化。就其先后顺序,构造函数初始化是最后进行,其他三种初始化我们仍然需要分为静态变量和非静态变量讨论。但静态变量的另三种初始化过程(构造函数初始化除外)先于非静态变量。
对于静态变量,默认初始化、显示初始化、构造代码块初始化的先后顺序由其代码的前后位置决定,代码位置靠前的将先执行。由于默认初始化伴随着静态变量的声明,显示初始化只能接在变量声明之后,所以一般而言,对于同一个静态变量,先执行默认初始化,再执行显示初始化,最后执行构造代码块初始化。
对于非静态变量,同静态变量。
见如下代码实验:
class A{A() //代码区1:构造器初始化{x=3;z=3;System.out.println("nonstatic gouzaohanshu Init...z..."+z);System.out.println("static gouzaohanshu Init...x..."+x);}int z=printInit("nonstatic xianshi Init...z"); //代码区2:非静态变量z显示初始化//代码区3:非静态变量z构造代码块初始化{z=2;System.out.println("nonstatic gouzaodaimakuai Init...z..."+z);}static int x=printInit("static xianshi Init...x");//代码区4:静态变量x显示初始化static int y;//代码区5:静态变量y默认初始化//代码区6:静态变量y构造代码块初始化static{System.out.println("static gouzaodaimakuai Init...y..."+y);}//代码区7:静态变量x构造代码块初始化static{x=2;System.out.println("static gouzaodaimakuai Init...x..."+x);}private static int printInit(String s){System.out.println(s);return 1;}}class InitDemo{public static void main(String[] args) {A a=new A();}}
其运行结果如下图所示:
尽管非静态变量z先于静态变量x和y声明和初始化,但最后的执行结果显示x和y先进行初始化,且x和y的初始化顺序和其代码定义的前后位置有关。容易看出,int类型的默认初始化值为0。至于结果的最后两行先打印z,再打印x,则和初始化顺序无关,是由构造函数中的方法调用先后顺序决定的。
若只看静态变量x,我们可以发现,先进行默认初始化,再进行显示初始化,最后进行构造代码块初始化。
0 0
- Java中有关变量初始化先后顺序的思考和实验(二)
- Java中有关变量初始化先后顺序的思考和实验(一)
- Java中有关变量初始化先后顺序的思考和实验(三)
- Java中 初始化的先后顺序?
- java初始化的先后顺序
- java对象初始化的先后顺序
- Java继承类的初始化先后顺序
- C++中异常规格(异常抛出表)和 成员初始化表 的放置先后顺序
- java中变量的初始化顺序
- Java中static变量的初始化顺序
- Java中变量的初始化顺序
- java中成员 变量的初始化顺序
- 成员初始化的先后顺序
- 在Spring容器中Bean的几种初始化、销毁方法的实现和先后顺序
- 有关NAT和路由之间的先后顺序
- 关于Java中静态数据的初始化时间和顺序的学习思考
- C++构造函数中初始化成员的先后顺序
- Java中静态变量和非静态变量的初始化顺序
- 高效面试之数组专题中级篇(leetcode)
- 多线程实现文件拷贝
- 白话经典算法系列之三 希尔排序的实现
- 竞价点击服务器和网站SEO优化服务器整合开发流程
- 高效面试之二叉树
- Java中有关变量初始化先后顺序的思考和实验(二)
- 遍历指定目录下指定格式的文件
- linux 网速慢,访问国外网站也慢 解决方法
- 高效面试之DFS
- 实现播放WAV文件
- Android拨号器的实现(四中点击事件)
- 机器学习算法基础概念学习总结
- 数据文件的添加,修改,删除 实例
- 高效面试之动态规划DP