Java中的初始化顺序
一.在创建类时为成员变量赋值和在构造函数中的赋值的先后顺序
在未用构造器之前其实已经将类的字段进行了赋值只是在调用构造器时,又将类的字段进行了重新的赋值。如下:
package com.cjm.inititalize; public class Initialize2 {
public static void main(String[] args) {
new A1();
}
}
class A1{
private int i;
private B1 b;
public A1 () {
System.out.println("在初始化函数调用前:i的值为:"+i+"在初始化之前引用b的值为:"+b);
i=4;
b=new B1();
System.out.println("初始化之后的i值为:"+i+"初始化之后的b为"+b);
} }
class B1{ }
结果如下:
1.非静态成员变量赋值优先于构造函数且成员变量的赋值顺序按照初始化的顺序
public class Inititalize {
private A a1 = new A("a1"); public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
结果如下:
2.静态成员赋值优先于非静态成员赋值,非静态成员优先于构造函数的
注意:静态变量只会初始化一次,且必须在创建是就初始化
public class Inititalize {
private A a1 = new A("a1"); public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
}
结果为:
3.静态方法块的初始化同样也优先于非静态成员赋值
注意静态方法的变量为局部变量,生命周期仅在方法块中。
public class Inititalize { private A a1 = new A("a1"); public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
static {
A a3=new A("a3");
}
}
结果如下::
小结:
public class Inititalize {
private A a1 = new A("a1");//4
private B b2=new B("b2");//5
public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");//1
public static void main(String[] args) {
new Inititalize();
}
static {//2
A a3=new A("a3");
}
private static B b1=new B("b1");//3
}
结果如下:
由上可知初始化顺序为:静态成员变量/静态方法块,成员变量初始化/方法块,构造函数。
Java中的初始化顺序的更多相关文章
- [java] java中的初始化顺序
先看程序: package init_cls; class A{ {System.out.println("i am in the class A!");} static { Sy ...
- Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)
本文链接 http://blog.csdn.net/xiaodongrush/article/details/29170099 參考文章 http://my.oschina.net/le ...
- Java类继承关系中的初始化顺序
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类Ini ...
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- java创建对象 的初始化顺序
java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...
- Java学习笔记二十三:Java的继承初始化顺序
Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...
- Java中的初始化详细解析
今天所要详细讲解的是Java中的初始化,也就是new对象的过程中,其程序的行走流程. 先说没有静态成员变量和静态代码块的情况. public class NormalInit { public sta ...
- 浅谈Java中静态初始化块跟非初始化块
众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: ...
- java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...
随机推荐
- PyCharm调试运行Scrapy教程
一.使用scrapy创建一个项目 这里使用scrapy官方第一个示例 scrapy startproject tutorial 使用PyCharm打开项目,在tutorial/tutorial/spi ...
- pickle file in matlab
Load pickle files in Matlab Posted on June 12, 2013 by xcorr http://xcorr.net/2013/06/12/load-pick ...
- linux查看在线用户并踢出用户
linux查看在线用户并踢出用户 1.查看在线用户 w [root@dbserver01 ~]# w 16:45:04 up 16 days, 8:48, 1 user, load average: ...
- html页面标题增加图标方法
有些网站的网页标题部分有图标,很带感.方法很简单: 在<head></head>部分增加下列一行代码即可. <link rel="shortcut icon&q ...
- X86汇编语言实现的贪吃蛇游戏
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
原文: https://blog.csdn.net/briblue/article/details/75093382 写这篇文章的原因是这两天在编写关于 Dagger2 主题的博文时,花了大量的精力来 ...
- ubuntu下修改文件权限
参考:https://www.cnblogs.com/viviwind/archive/2012/08/02/2619451.html 常用方法如下: sudo chmod 600 ××× (只有所有 ...
- 自定义AXI-IP核(转)
目的: 自定义一个IP核,通过AXI总线与ARM系统连接 环境: Win7 32bit Vivado2014.4.1 Xilinx sdk2014.4 开发板: Zc702 第一步: 新建一个自定义的 ...
- static全局变量与普通全局变量的区别,static局部变量与普通局部变量的区别,static函数与普通函数的区别
static全局变量与普通全局变量的区别 static全局变量和普通全局变量的存储方式没有不同,如果它们都已经初始化,那么存放在进程的数据段中,否则存放在bss段.这两者的不同点在于作用域不同,当一个 ...
- Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转
Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...