java static块和非static块的执行顺序
来源:互联网 发布:视频裁剪大小软件 编辑:程序博客网 时间:2024/04/29 21:09
package test;public class Parent { public Parent(){ System.out.println("constructor in parent"); } { System.out.println("not static in parent"); } static{ System.out.println("static in parent"); }}
public class Child extends Parent { public Child(){ System.out.println("contstructor in child"); } { System.out.println("not static in child"); } static{ System.out.println("static in child"); } public static void main(String[] args){ new Child(); Utils.testUtils(); Utils u1=new Utils(); Utils u2=new Utils(); u1.count(); u2.count(); /* * static in parent //在类加载前首先加载类信息和静态块 * static in child * not satic in parent//在创建对象时,调用构造方法前执行非静态快 * constructor in parent * not static in child * constructor in child * static in utils * testUtils //Utils对象没有创建,非static块没有被加载,因此非static块只有在创建对象的时候才会执行 * not static in utils//每创建一次对象,非static块执行一次 * not static in utils * object.count()//此后在调用方法时,非静态块不会再被执行 * object.count() */ }}
在new Child 时,首先会加载Child类,而加载Child时发现它是子类,而子类是父类派生的,因此要想加载子类必须先加载父类!
加载父类时,首先将父类的类信息、静态变量、静态代码块加载到方法去,因此首先父类的静态代码块被执行;
加载完父类,然后加载子类,同样子类的静态代码块被得到执行;
当类加载完,需要创建对象,在创建对象前首先执行非静态代码块,因为子类隐式调用父类构造方法,因此首先执行父类的非静态块,紧接着再执行父类的构造方法;
然后程序创建子类对象,发现子类中也包含非静态块,于是先执行非静态块,紧接着执行构造方法中其他代码!
非静态块在对象创建时执行,并且每次创建都会执行,由此可以看到,非静态块就相当于类的成员变量,在创建对象调用构造方法前执行。一旦对象创建完成,此后该对象的非静态块就再也不会执行!
阅读全文
0 0
- java static块和非static块的执行顺序
- Java中static代码块、普通代码块和构造代码块的执行顺序
- Java中构造函数、static块、{}块的执行顺序
- Java和Android中,代码块、static静态代码块的执行顺序
- Java和Android中,代码块、static静态代码块的执行顺序
- java static 语句块与非static语句块的调用顺序
- java static块和static方法及static方法和非static方法的区别
- java类运行以及static块的执行顺序
- Java static块与构造函数的执行顺序
- static块和构造函数的执行顺序
- static块和构造函数的执行顺序
- static 静态变量和静态代码块的执行顺序
- static块的执行
- static 块以及代码块执行顺序
- static块、普通代码块的执行顺序
- 父类构造器、子类构造器、static代码块、非static代码块执行顺序
- Java static属性和静态代码块和构造方法等的执行顺序探讨
- 子类和父类的 static块 和 构造方法 构造块 的执行顺序
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- VMware上Linux虚拟机与windows互相自由复制与粘贴
- Map.Entry(来自百度知道,下附地址)
- js随机数排序
- Memcached的yum安装
- java static块和非static块的执行顺序
- prototype
- android SHA1获取(代码获取)
- JDK 32bit与64bit的区别
- React-Native简单介绍
- supervisor使用详解
- mysql安装过程遇到的问题以及解决方案
- java的历史与展望
- js运动与变化