`
涛涛饭
  • 浏览: 10478 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

 
阅读更多

程序的执行顺序

1.   执行父类的静态块和静态属性(执行顺序:按照程序的排列顺序执行)

   执行子类的静态块和静态属性(执行顺序:按照程序的排列顺序执行)→

   执行主函数new对象前面的输出语句和非静态块(执行顺序:按照程序的排列顺      序执行)→

   父类的属性和非静态块(执行顺序:按照程序的排列顺序执行)→

   父类的构造器→

   子类的属性和非静态块(执行顺序:按照程序的排列顺序)→

   子类的构造器→

    new结束,执行new后面的语句

下面我将给出一个程序来验证我上面的执行顺序是否正确

1.

package com.cl.ft.text;

 

//子类T继承父类X

public class T extends X{

//子类静态块

        static {

System.out.println("我是子类的静态块A");

}

        //子类静态属性

static B r = new B();

        //子类非静态块

{

System.out.println("我是子类的非静态的块");

}

        //子类的静态方法

public  static void Assa (){

System.out.println("我是子类的静态方法");

}

//子类的非静态属性 

        Y y=new Y();

        //子类的无参构造器

        public T(){

       //调用父类的有参构造器

    super(5);

        System.out.println("我是子类的无参构造器");

      }

      public static void main(String[] args) {

   

    System.out.println("我是主函数new对象前面的");

       //主函数的非静态块

    {

    System.out.println("我是主函数new前面的非静态块");

    }

       //new一个父类对象

    X r = new X();

       //new一个子类对象

    T q =    new T();

        System.out.println("我是主函数new对象后面的add");

       //new对象后面的非静态块

        {

    System.out.println("我是主函数new后面的非静态块");

    }

    }

}

//父类X

class X{

//父类静态块

static {

System.out.println("我是父类的静态块B");

}

        //父类静态属性

static B t = new B();

        //父类非静态属性

B d = new B();//属于X的属性

        //父类非静态块

{

System.out.println("我是父类的非静态块");

}

       //父类的静态方法

public  static void Ass (){

System.out.println("我是父类的静态方法");

}

//父类的非静态属性

B b = new B();//属于X的属性

        Y y=new Y();

       //父类的无参构造器

    public X(){

        System.out.println("X我是父类无参的构造方法");

    }

      //父类的有参构造器

    public X(int i){

    System.out.println("我是父类有参的构造方法");

    }

    

}

class Y{

    public Y(){

        System.out.println("YY");

    }                                                                                                                     2.                                                                                                                    package com.cl.ft.text;

 

public class B {

 

B (){

   System.out.println("zz");

}                                                                                                                       运行结果                                                                                                         由于运行结果复制不能显示字母我就用截图给大家看                                          我会把源代码和截图都给你大家,一张图片,一个压缩包,里面有两个文件。运行的结果有点长,大家要是觉得有点晕,可以先注释大部分语句,一点一点增加语句来比较性的查看运行结果,这个需要大家自己操作运行,这样理解的更加深刻一点,如果有不懂的可以给我留言,我会尽量最快来回复大家的疑问。谢谢大家!!!                                 

zz

YY                                            

 

 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

  • 大小: 16.6 KB
分享到:
评论
1 楼 涛涛饭 2015-11-12  
大家注意下面的最后那些代码忘记删除了,希望不要影响大家的阅读

相关推荐

    java中的继承(子类调用父类构造方法还不懂).doc

    本文详细介绍了Java中的继承机制,重点讨论了子类如何调用父类构造方法、重写与重载的区别、多态的应用以及`instanceof`操作符的使用。理解这些概念对于编写高质量、可维护的Java代码至关重要。

    c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是

    C#编程语言中,类和对象的构造及方法执行顺序是一个关键的概念,尤其在涉及到继承、构造函数、虚方法和重写时。以下是对给定场景的详细解释: 1. **场景一:只实例化父类** 当我们创建一个`A`类型的对象时,只会...

    验证有继承时的调用顺序

    这时,构造函数的调用顺序遵循C++标准中的"深度优先,左到右"规则,即先按照从左到右的顺序调用最左边父类的构造函数,然后逐个调用其他父类的构造函数,最后执行子类的构造函数。析构顺序则相反,先执行子类的析构...

    浅谈Java中父类与子类的加载顺序详解

    以下是Java中父类与子类加载顺序的详细解释: 1. **静态初始化**: - 首先,JVM会加载类的静态部分。这意味着先加载所有静态变量的初始化,并执行静态初始化块(如果有的话)。在给定的例子中,无论父类还是子类,...

    java中子类继承父类,程序运行顺序的深入分析

    在上述例子中,我们看到"========静态程序块====== "先于"========子类静态程序块====== "打印,表明父类的静态块先执行。 2. **非静态变量初始化**:接下来,程序会执行非静态代码块(也称为实例初始化块),这些...

    Java继承习题

    在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行自己的构造函数 - D. 子类不但可以自动执行父类的无参构造函数,也可以自动执行父类的有参构造函数 - **解析**: - 子类默认继承父类的无参...

    EnumTest--构造顺序:父类、类成员变量、子类.zip

    这是面向对象编程中的一个基本规则,即子类实例化时会先执行父类的构造方法。如果父类还有父类,这个过程会一直向上递归,直到最顶层的类(Object类)。 2. **类成员变量初始化**:在所有父类构造器执行完毕后,...

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    java的继承总结.doc

    继承是特殊的is-a关系,即子类继承父类,说明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。子类和父类之间存在着继承关系,子类继承父类的所有属性和方法。 二、继承的语法格式 Java继承的关键字...

    java中与继承有关的程序内存分析

    在Java编程语言中,继承是面向对象特性的重要组成部分,它允许一个类(子类)从另一个类(父类)继承属性和方法。这种机制有助于代码重用和构建复杂的类层次结构。当我们谈论“java中与继承有关的程序内存分析”时,...

    java 继承关系的加载顺序

    在Java编程语言中,继承是面向对象特性的重要组成部分,它允许一个类(子类)从另一个类(父类)继承属性和方法。了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. ...

    04_第4章 继承与多态1

    在实际编程中,构造方法的调用顺序是先调用父类的构造方法,然后才是子类的构造方法。例如,`Base`类的构造方法会先执行,然后是`Son`类的构造方法。在示例中,`Base`类的构造方法首先被调用,设置变量a的值,接着是...

    讲义2继承多态.docx

    2. **对象多态**:子类对象可以被当作父类对象处理,这使得程序在运行时能够根据实际对象的类型动态地执行相应的方法。多态性增强了代码的灵活性,使得设计更抽象,降低了类与类之间的耦合。 通过理解和运用这些...

    面向对象oop详解

    向上转型是将子类对象赋值给父类引用的过程,是一种自动类型转换,此时可以调用父类中的方法,如果方法在子类中被重写了,那么会调用子类中的实现,这种机制被称为动态绑定。多态的实现减少了代码的冗余,提高了程序...

    类继承的初始化顺序类,继承的初始化顺序

    初始化块的执行顺序同样遵循它们在类体中出现的顺序。 #### 示例代码分析 为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```java class Base { public Base() { System.out....

    java 重载,继承,重写和多态的区别. doc

    总结起来,重载用于在同一类中创建具有相同名称但行为不同的方法,继承使得子类可以继承并扩展父类的功能,重写允许子类定制父类方法的行为,而多态则让程序更加灵活,可以使用父类引用处理各种子类对象。...

    JAVA程序执行顺序,你了解了吗.doc

    以下是关于JAVA程序执行顺序的详细解释: 1. **静态块**: 静态块是在类加载时执行的,它不依赖于类的实例。在上述代码中,`Mastiff`类的静态块`static block`会在类被加载到JVM(Java虚拟机)时执行,这是在任何...

    类执行顺序小结.doc

    Java类的执行顺序是理解Java程序行为的关键,它涉及类的加载、初始化以及构造过程中的各种细节。以下是对类执行顺序的深入解析,基于标题“类执行顺序小结”和描述“关于Java类的执行顺序详解”。 #### 一、类的...

Global site tag (gtag.js) - Google Analytics