第一 普通的代码块
就是我们说说的代码块,它无论定义在构造方法的哪个地方(或前或后),总是在构造方法之前运行,每定义一个实例对象,就会运行一次。如果父类中也有代码块则运行顺序如下:
1 父类普通代码块
2 父类构造方法
3 子类普通代码块
4 子类构造方法
例如:
public class CodeBlockTest { public static void main(String[] args) throws Exception{ new Child(); System.out.println("刚刚创建了一个实例"); new Child(); System.out.println("刚刚创建了一个实例"); } } class Parent{ public Parent() { System.out.println("父类构造方法"); } { System.out.println("父类普通代码块1"); } { System.out.println("父类普通代码块2"); } } class Child extends Parent{ public Child() { System.out.println("子类构造方法"); } { System.out.println("子类普通代码块"); } }
第二 静态代码块
静态代码块只在类加载的时候才会运行一次,之后使用该类时不会在运行。因为是先加载类才能创建实例的,所以当第一次使用类创建实例时,会先运行静态代码块。如果该类的父类中有静态代码块,则会先运行父类的静态代码块。如果之前已经加载了子类,则再加载父类时不再单独运行父类中的静态代码块。记住,静态代码块只运行一次。如下:
public class CodeBlockTest { public static void main(String[] args) throws Exception{ System.out.println("*****加载子类*****"); Class.forName("test2.Child"); System.out.println("*****加载子类*****"); Class.forName("test2.Child"); System.out.println("*****加载父类*****"); Class.forName("test2.Parent"); System.out.println("*****加载父类*****"); Class.forName("test2.Parent"); } } class Parent{ private int a; private static int b; static{ // 这是错误的,静态代码块中不能出现非静态的属性和方法 // a = 1; //这是错误的,静态代码块中不能出现this和super等关键字 // this.b = 10; //这是正确的 b = 10; System.out.println("父类静态代码块1"); } public Parent() { System.out.println("父类构造方法"); } static{ System.out.println("父类静态代码块2"); } } class Child extends Parent{ static{ System.out.println("子类静态代码块"); } public Child() { System.out.println("子类构造方法"); } }
运行结果是:
*****加载子类*****
父类静态代码块1
父类静态代码块2
子类静态代码块
*****加载子类*****
*****加载父类*****
*****加载父类*****
注意:静态代码块中不能出现非静态的属性和方法,也不能出现this和super等关键字。
相关推荐
主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化中常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
实例初始化过程:实例初始化就是执行()方法:()方法可能重载有多个,有几个构造器就有几个方法()方法由非静态实例
要创建一个类的实例,必须加载和初始化该类。 main()方法所在的类,会被优先加载并初始化 子类初始化前,会先加载并初始化它的父类 初始化一个类,其实质上就是执行了()方法 ()方法包含了,静态变量显式赋值代码以及...
03_JavaSE面试题:类初始化和实例初始化等
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
NULL 博文链接:https://happywaterlife.iteye.com/blog/1567461
C++ 静态成员的类内初始化详解及实例代码 一般来说,关于C++类静态成员的初始化,并不会让人感到难以理解,但是提到C++ 静态成员的”类内初始化”那就容易迷糊了。 我们来看如下代码: //example.h #include #...
对象创建和初始化过程3.1 new对象底层字节码指令分析3.2 对象初始化过程详解【重点】3.2.2 实例变量初始化顺序分析3.2.3 继承中实例变量初始化顺序四 类实例化顺序总结4.1 类初始化阶段4.2 对象的创建和初始化阶段...
VB 数组的初始化实例 VB 数组的初始化实例 VB 数组的初始化实例
java教程 由浅入深详解Java 类的实例化顺序 在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按...
而非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。 静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 静态变量有两种情况: ● 静态...
继承关系:类的实例化顺序 * 执行过程为:启动类是否为继承关系树中的一个,如果是则先执行启动类的所有父类的静态语句块;然后执行启动类的静态语句块static{} -> * 执行启动类的main函数 -> 创建对象的继承树从...
下面小编就为大家带来一篇Java 普通代码块静态代码块执行顺序(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java 内部类 实例化 在Outer类的静态方法中实例化内部类 在同一个包的其它类中实例化Outer类中的内部类
主要介绍了Java中初始化块详解及实例代码的相关资料,在Java中,有两种初始化块:静态初始化块和非静态初始化块,需要的朋友可以参考下
spring配置对象实例化后执行的方法,两种实现比对,通过InitializingBean接口,并实现arterPropertiesSet()方法;或者通过applicationContext.xml配置init-method属性
此文档那个主要讲解oracle的实例和初始化参数~~~~~~~~~
/*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行) 1 静态变量,静态代码块(类加载时执行,类不加载不执行) ... System.out.println("类Test实例代码块被执行 4"); //实例代码块 } p
22-8位数码管静态显示其中之二(51单片机C语言实例Proteus仿真和代码)22-8位数码管静态显示其中之二(51单片机C语言实例Proteus仿真和代码)22-8位数码管静态显示其中之二(51单片机C语言实例Proteus仿真和代码)22-8位数...
主要介绍了简单了解java类的初始化以及类的实例化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下