静态代码块 -- >构造代码块 --> 构造方法
静态代码块:只执行一次
构造代码块:每次调用构造方法都执行

http://blog.csdn.net/wuhaiwei002/article/details/55226155

JAVA是一门面向对象的编程语言,这里考虑“类”里面在程序开始执行时的执行顺序。 
先看一个实例:

class Person{
static {
System.out.println("执行Person静态代码块");
}
{
System.out.println("执行Person构造代码块");
}
public Person(){
System.out.println("执行Person无参构造方法");
}
public Person(String name){
System.out.println("执行Person构造方法"+ name);
}
} class Student extends Person{
static {
System.out.println("执行Student静态代码块");
}
{
System.out.println("执行Student构造代码块");
}
public Student(String name){
super(name);
System.out.println("执行Student构造方法" + name);
}
public Student(){
super();
System.out.println("执行Student无参构造方法");
}
}
public class ExtendsStaticConstruct {
public static void main(String args[]){
Student student1 = new Student("lili");
System.out.println("--------------------");
Student student2 = new Student();
}
}

执行结果: 

说明: 
一般的类里面包含: 
1、静态代码块(静态区、静态变量等) 
2、构造代码块({ }中间的内容) 
3、构造方法

其执行顺序也是1、2、3先后执行,这里需要注意的是:考虑继承特性。 
子类与父类的执行顺序是: 
1、先执行父类的静态代码块(父1) 
2、子类的静态代码块(子1) 
3、父类构造代码块(父2) 
4、父类构造方法(父3) 
5、子类构造代码块(子2) 
6、子类构造方法(子3)

当一个类从被JVM装载开始,各种代码的执行顺序大致如下:

被JVM装载-> 
执行父类的相关代码-> 
如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行-> 
如果有静态代码块,以与静态初始化一样的方式执行-> 
如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法-> 
执行非静态代码块-> 
执行本类的构造函数-> 
执行其他代码。

这里的执行顺序同子类构造中有一个默认的父类构造super()无关,不是执行到隐藏的super()才开始初始化父类的,类的初始化是分层初始化,即先初始化父类,再初始化子类,初始化每个类的过程中,进行类的初始化工作,先进性成员变量的初始化,成员变量的初始化顺序是:默认初始化,即int为0这种->显示初始化,例如给int型显示初始化了值->构造方法初始化,所以是这里执行到了构造方法。

但是一定要注意,父类初始化选择的构造方法却和子类中super 选择的构造相关,下面代码很好的解释了这点。

java中代码执行顺序的更多相关文章

  1. Java中构造函数执行顺序的问题

    1,  先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行:而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创 ...

  2. java中的执行顺序

    静态,非静态,构造,先父再子另外,静态块与静态变量的顺序取决于代码中的顺序 Comparable接口应用

  3. Java中父类和子类代码执行顺序

    执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 pack ...

  4. 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

    编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...

  5. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  6. final、static、代码块、静态代码块、内部类、代码执行顺序

    final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               ...

  7. 详解JavaScript的任务、微任务、队列以及代码执行顺序

    摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...

  8. JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载

    JavaScript在页面中的执行顺序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 阅读数 ...

  9. [js]js代码执行顺序/全局&私有变量/作用域链/闭包

    js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...

随机推荐

  1. java HttpClient POST请求

    一个简单的HttpClient POST 请求实例 package com.httpclientget; import java.awt.List; import java.util.ArrayLis ...

  2. double转int时精度不一致问题

    float和double类型的主要设计目的是为了科学计算和工程计算.它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该 ...

  3. DB2删除表分区

    近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下: 上网搜索资料发现删除表分区大概分这么几步: 1.查询需要删除掉的分区: select t.D ...

  4. HDU-2255(KM算法)

    HDU-2255 题目意思转化之后就是,给你一个二分图(也称 二部图) ,要求选择一些边让左边的点都对应左边的某一个点!该问题也叫做二分图最大匹配.所以可以用KM算法来做这道题.KM前提你要理解匈牙利 ...

  5. hdu-5768 Lucky7(容斥定理+中国剩余定理)

    题目链接: Lucky7 Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pr ...

  6. Python框架下django 的并发和多线程

    django 的并发能力真的是令人担忧,django本身框架下只有一个线程在处理请求,任何一个请求阻塞,就会影响另一个情感求的响应,尤其是涉及到IO操作时,基于框架下开发的视图的响应并没有对应的开启多 ...

  7. 算法实现c语言--01

    打印九九乘法表 #include<stdio.h> #include<stdlib.h> int main() { , j = ; ; i <= ; i++) { ; j ...

  8. 最短路——Dijkstra和Floyd

    Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...

  9. 十张Gif动图让你弄懂递归等概念

    图像(包括动图)是传递信息的一种高效方式,往往能增强表象.记忆与思维等方面的反应强度.所谓一图胜千言,说的就是这个道理. 今天为大家整理了十张动图GIFS,有助于认识循环.递归.二分检索等概念的具体运 ...

  10. HashMap为什么比数组查询快

    通常数组不直接保存值,而是通过保存值的list.然后对list中的“值”使用equals方法比较,这部分查询速度自然慢.但是如果有好的散列函数,数组的每个位置就只有较少的“值”.因此,不是查询所有的l ...