Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。

public class FatherTest {

private String name;

FatherTest(){

System.out.println("--父类的无参构造函数--");

}

FatherTest(String name){

this.name=name;

System.out.println("--父类的有参构造函数--"+this.name);

}

static{

System.out.println("--父类的静态代码块--");

}

{

System.out.println("--父类的非静态代码块--");

}

public void speak(){

System.out.println("--父类的方法--");

}

}

加入一个main程序后

public static void main(String[] args) {

System.out.println("--父类主程序--");

FatherTest father=new FatherTest("父亲的名字");

father.speak();

}

执行结果为:

--父类的静态代码块--

--父类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法—

可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。

如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。

public class SonTest extends FatherTest {

private String name;

static{

System.out.println("--子类的静态代码块--");

}

{

System.out.println("--子类的非静态代码块--");

}

SonTest(){

System.out.println("--子类的无参构造函数--");

}

SonTest(String name){

this.name=name;

System.out.println("--子类的有参构造函数--"+this.name);

}

@Override

public void speak(){

System.out.println("--子类Override了父类的方法--");

}

}

然后再加入一个main函数

public static void main(String[] args) {

System.out.println("--子类主程序--");

FatherTest father=new FatherTest("父亲的名字");

father.speak();

SonTest son=new SonTest("儿子的名字");

son.speak();

}

执行结果为:

--父类的静态代码块--

--子类的静态代码块--

--子类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法--

--父类的非静态代码块--

--父类的无参构造函数--

--子类的非静态代码块--

--子类的有参构造函数--儿子的名字

--子类Override了父类的方法--

加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。

java中子类继承父类程序执行顺序问题的更多相关文章

  1. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  2. java中子类继承父类什么?

    1.继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包: 2.继承默认权限修饰符修饰的属性和方法,前提是子类和父类在同一个包.

  3. Java子类继承父类的执行顺序

    父类的静态代码块(static) 子类的静态代码块(static) 父类的非静态代码块(父类成员初始化) 父类的构造方法 子类的非静态代码块(子类成员初始化) 子类的构造方法

  4. java中子类继承父类时是否继承构造函数

    来源:http://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html --------------------- java继承中对构造 ...

  5. Java中子类和父类相关方法的执行顺序

    无意中看到下面一个题目,大家一起来看看最后的输出结果是什么.反正我看完之后,用IDE测试后感觉知识点得到巩固了. /** * 函数执行顺序测试 * Created by 萌小Q on 2017/5/1 ...

  6. PHPWind 8.7中代码结构与程序执行顺序

    pw9在此不谈,他是完全重构的作品,是完全MVC下的体系.当然,其中很多东西在PW8.7下已经可见端倪. 主要代码结构 1. 以现代的观点,PW是多入口应用模式,程序根目录下的文件几乎都是入口: 2. ...

  7. [转]Java中子类调用父类构造方法的问题分析

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个 ...

  8. 关于JAVA中子类和父类的构造方法

    本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...

  9. java中return与finally的执行顺序

    可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...

随机推荐

  1. ZJOI2019Day2 游记

    原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day2 游记 4-23 乘车. 报到. 自闭. 晚上没睡好. 4-24 上午张哲宇讲课. 幕后点人上去讲题. 然 ...

  2. python中用xlsxwriter创建图表

    缺点:xlsxwriter不能对已存在的Excel进行编辑插入图标   生成图标需要: 1.先准备数据 2.将数据插入到excel中 3.根据插入的数据生成图表 这里的生成excel主要分为准备多维数 ...

  3. 部分手机浏览器存在将ajax请求当成广告过滤的情况,及解决方案

    我们发现h5页面在某些浏览器请求不到数据,经过排查,是浏览器的广告拦截模块搞的鬼. 通过删减参数,发现adtype和adnum参数去掉后,接口可以正常请求,开始以为是官方拦截关键词带有ad的参数,后来 ...

  4. windows部署Apollo

    前言 配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一.试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公 ...

  5. SpringCloud使用Prometheus监控(基于Eureka)

    本文介绍SpringCloud使用Prometheus,基于Eureka服务发现. 1.Prometheus介绍 在之前写过两篇有关Prometheus使用的文章,如下: <SpringBoot ...

  6. Spiring系列__03IOC补充

    这篇文章是对前一篇的一些补充: 1.SpringIOC容器可以管理Bean的声明周期: 通过构造器或工厂方法创建bean的实例: 为bean属性设置值或者引入其他bean: 调用bean的初始化方法, ...

  7. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  8. django默认模板引擎和jinja2模板引擎

    在使用中,大家会发现django默认模板引擎有很多局限性,最明显的就是四则运算.就只能加减,乘除都不支持.另外还有判断相等,不能直接if,要用ifequal.确实不太方便.还有一点,django默认模 ...

  9. python 迭代器,生成器

    在 python 中我们常用 for in 来遍历 list, set, dict, str 等. for in 的本质就干了两件事: 调用 __iter__() 获取迭代器; 调用 next() 直 ...

  10. POJ3630

    Tire树裸题,一开始写动态的字典树,然后TLE,每次new一个新节点耗费时间较多.后来改成数组模拟的. //#include <bits/stdc++.h> #include <c ...