一.在创建类时为成员变量赋值和在构造函数中的赋值的先后顺序 

在未用构造器之前其实已经将类的字段进行了赋值只是在调用构造器时,又将类的字段进行了重新的赋值。如下:

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中的初始化顺序的更多相关文章

  1. [java] java中的初始化顺序

    先看程序: package init_cls; class A{ {System.out.println("i am in the class A!");} static { Sy ...

  2. Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

    本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 參考文章     http://my.oschina.net/le ...

  3. Java类继承关系中的初始化顺序

    Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类Ini ...

  4. 图示Java类的初始化顺序

    Java类的初始化顺序   在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行.   以下为代码验证阶段,一共三个类 ...

  5. java创建对象 的初始化顺序

    java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...

  6. Java学习笔记二十三:Java的继承初始化顺序

    Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...

  7. Java中的初始化详细解析

    今天所要详细讲解的是Java中的初始化,也就是new对象的过程中,其程序的行走流程. 先说没有静态成员变量和静态代码块的情况. public class NormalInit { public sta ...

  8. 浅谈Java中静态初始化块跟非初始化块

    众所周知在JAVA编程语言中有两种初始化块:   静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别   静态初始化块 定义:       ...

  9. java中静态初始化块的执行顺序

    在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...

随机推荐

  1. SpringBoot鸡汤(注解集合)

    1.(ConfigBean.java :是一个带有属性的bean类) @Configuration @ConfigurationProperties(prefix = “com.md”) @Prope ...

  2. MySQL批量修改字符集

    统一将字符字符集变成utf8_general_ci,已测试. DROP PROCEDURE IF EXISTS `chanageCharSet`; CREATE PROCEDURE `chanageC ...

  3. python django 访问static静态文件

    settings 文件配置: STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)PROJEC ...

  4. linux下top命令参数详解

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. 内存信息.内容如下: Mem: 191272k to ...

  5. 逆袭之旅DAY20.XIA.选择结构

    2018-07-16  18:50:49 本章目标: 基本if选择结构 逻辑运算符 多重if选择结构 嵌套if选择结构 什么是if选择结构: if选择结构是根据条件判断之后再做处理 import ja ...

  6. isScroll 插件在iPhone 5s 和以上版本

    才加入这个移动项目组三天,解决一个同事(请假),解决一个切换头部tab 选型时,下拉数据,再次切换到另外一个选项时,出现滚动条距离顶部有些距离,当频繁操作会出现距离顶部距离加大问题(第二天衍生出其他b ...

  7. Mysql InnoDB三大特性-- change buffer

    Mysql InnoDB三大特性-- change buffer

  8. el表达式原样输出,不被解析

    今天遇到了,在jar包都有的前提下EL表达式原样输出,不被解析,原因是: page指令中确少 isELIgnored="false" 加上就好了 <%@ page langu ...

  9. 【阿圆实验】Grafana HA高可用方案

    一.实现Grafana高可用 1.Grafana实现高可用性有两步: >>使用共享数据库存储仪表板,用户和其他持久数据>>决定如何存储会话数据. 2.Grafana高可用部署图 ...

  10. python作业学员管理系统(第十二周)

    作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学 ...