`
d_y_zh
  • 浏览: 4280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

Java的块,静态块,构造函数,继承的执行先后顺序

阅读更多
public class Test
{
public static void main(String []agrs)
{
Son son = new Son();
}
}

class Super
{
public Super()
{
System.out.print("A\t");
}
{
System.out.print("B\t");
}
static
{
System.out.print("C\t");
}
}

class Son extends Super
{
public Son()
{
System.out.print("D\t");
}
{
System.out.print("E\t");
}
static
{
System.out.print("F\t");
}
}





静态的东西是属于类的,非静态的东西是属于实例的。

静态的先执行,然后才是非静态的。

在上例中,还要考虑继承的问题。

首先是父类静态 --> C

然后是子类静态 --> F

非静态区块可以看作是构造函数中执行完父类构造函数后的第一部分。(构造函数第一行有一个默认的super()调用,就是调用父类构造函数)。

这个时候执行父类构造函数:

父类非静态区块 --> B

父类构造函数块 --> A

然后是子类构造函数:

子类非静态区块 --> E

子类构造函数块 --> D

总结一下就是:

C F B A E D

值得注意的是,静态的东西只会执行一次,就是在类加载的时候。

如果我们在上例中修改main函数为:


Java code

public static void main(String[] agrs) { Son son = new Son(); Son son2 = new Son();}



这个时候的执行结果为:

C F B A E D B A E D

可以看到第二次创建Son实例的时候,静态的东西不会再次执行。
分享到:
评论
1 楼 xihuan&java 2010-06-26  
谢谢
学习了

相关推荐

    java 基础 类对象创建实例化过程 实例解析

    * 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...

    Java开发技术大全(500个源代码).

    staticBlock.java 演示静态块的使用 staticVar.java 定义静态变量 supplyTest.java 对象作为静态成员使用示例 trySwap.java 试图交换两个形参的值 useOnlyTest.java 创建多个对象,演示this的作用 ...

    Java中类的加载顺序

    不过我们可以换个直接的问法,如果类A和类B中有静态变量,静态语句块,非静态变量,非静态语句块,构造函数,静态方法,非静态方法,同时类A继承类B,请问当实例化A时,类内部的加载顺序是什么?  当时我也是一头...

    javacore:java核心 运算符,控制语句,函数,异常,集合,线程,数组,IO流,网路编程,设计模式,java8,面试相关

    构造函数 代码块 代码块的说明 this关键字 static关键字 使用static关键字统计类的创建次数 面向对象 main函数 设计模式-单例 继承 jvm类加载顺序决定代码执行顺序 super关键字 方法重写 instanceof关键字 fi

    Java初始化顺序

    1 无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println(Sample默认构造函数被调用); } } class Test{ static Sample sam=new...

    java 面试题 总结

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...

    C++编程思想 (作者学习C++亲身体会及多年教学经验)

    全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...

    疯狂JAVA讲义

    学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象? 141 5.5.2 构造器的重载 142 学生提问:为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器...

    C++编程思想1-5 清晰PDF

    全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...

    C++编程思想(中文版)

    全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...

    Java面试宝典-经典

    11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一...

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java面试宝典2010版

    11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一...

    java面试题大全(2012版)

    11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;部分 82 1. 判断第二个日期比第...

    超级有影响力霸气的Java面试题大全文档

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。  接口(interface...

    Java开发技术大全 电子版

    4.4构造方法的继承154 4.5super的使用156 4.5.1用super引用父类的成员156 4.5.2使用super调用父类的构造方法157 4.6继承的内部处理158 4.7多态的基本概念159 4.8重载159 4.8.1普通方法的重载160 4.8.2构造...

    超爽的自学课件(java)

    在这一章的最后,我们将更贴近地观察初始化过程:自动成员初始化、指定成员初始化、初始化的顺序、static(静态)初始化以及数组初始化等等。 <br>(5) 第5章:隐藏实现过程 本章要探讨将代码封装到一起的方式...

Global site tag (gtag.js) - Google Analytics