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.. ...
随机推荐
- Boost.PropertyTree读取ini文件(Linux环境)
昨天因为需要读取配置文件略略伤神.网上很多例子但是我用都会报错,很多人把Boost.PropertyTree的函数写很麻烦的包所以报错我也不知道什么问题,所以今天整理下. 头上附上官网链接:Boost ...
- Qt Widgets——抽象旋转框及其继承类
默认外观分别如下(win7,与上述顺序对应): 可看出,都是由一个可编辑的文本框及右端小箭头组成 QAbstractSpinBox 属性简单解释如下: Properties accelerated : ...
- MSOCache office问题
\MSOCache 链接:https://pan.baidu.com/s/1dVvjYnD0D6DG6oFK_Mww2w密码:qrvp undefied
- etymon word write alb pain high alt increase large agency ag lose weight fat assist out~3
1● alb 2● write =====>rait 1● alg 2● pain 痛,疼痛 1● alt 2● high 高 1 ...
- 【Loadrunner_WebService接口】对项目中的GetProduct接口生成性能脚本
一.环境 https://xxx.xxx.svc?wsdl 用户名:username 密码:password 对其中的GetProduct接口进行测试 备注:GetProducts.xml文件内容和S ...
- LY.JAVA面向对象编程.内存图
2018-07-06 一个对象的内存图 两个对象的内存图 三个对象的内存图 this static super 向上转型 向下转型
- .NetCore发布到Centos docker
将.netcore mvc项目发布到centos7的docker中.环境 vmware14+Centos7+docker-ce 1.使用vs将.netcoremvc项目发布到本地,修改发布后的目录 名 ...
- xadmin后台导出时gunicorn报错ascii
django + xadmin + nginx + gunicorn部署后,xadmin后台导出model数据报错,gunicorn日志记录为:UnicodeEncodeError: 'ascii' ...
- 初时Windows程序
window 操作系统中,处处是窗体 优点:简单 强大 方便 灵活 步骤: 新建项目 项目类型 visual C#项目 模板 window应用程序 用partial 将同一个窗体的代码分开放在两个文件 ...
- List在遍历中删除t元素
法一:使用普通for循环遍历 注意: 1.从头开始循环,每次删除后 i 减一. 2.从尾开始循环. public class Main { public static voi ...