Java代码执行顺序
2017-02-15 23:58
183 查看
JAVA是一门面向对象的编程语言,这里考虑“类”里面在程序开始执行时的执行顺序。
先看一个实例:
执行结果:
![](https://img-blog.csdn.net/20170215235716097?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3VoYWl3ZWkwMDI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
说明:
一般的类里面包含:
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 选择的构造相关,下面代码很好的解释了这点。
先看一个实例:
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:类中代码的执行顺序
- java代码执行顺序
- Java代码实际执行顺序
- Java中创建对象的时候代码执行顺序
- java对象实例化过程中的代码执行顺序
- Java:类中代码的执行顺序
- jsp中java代码、jsp代码、js代码执行的顺序
- Java 内部代码执行顺序
- Java基础-代码执行顺序(重要)
- Java中创建对象时代码执行顺序
- Java代码的执行顺序
- Java代码执行顺序-样例
- 09 java的代码的执行顺序和异常处理
- java代码执行顺序
- java代码执行顺序
- 在后台JAVA代码中执行打乱集合顺序的方法
- js中与Java代码及ajax的执行顺序问题
- java代码执行顺序
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
- JAVA代码执行顺序