`
guomingzhang2008
  • 浏览: 160914 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java类执行顺序

    博客分类:
  • Java
阅读更多
1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码-->;初始化子类的静态代码-->;
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码-->;初始化父类构造函数-->;初始化子类非静态代码-->;初始化子类构造函数
2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4.  父类构造方法
5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6.  子类构造方法

注意:
只有当通过new对象实例或静态变量被访问时,静态变量才被初始化;
如:Person类,有静态变量a和b,通过Person.a的方式,变量a被初始化,但是变量b没有被出示化。

代码如下:

/**
 * 父类
 *
 * @author 张国明 [url=mailto:guomingzhang2008@163.com]guomingzhang2008@163.com[/url]
 * @version 2012-07-27 下午1:15
 */
public abstract class Father {
    private static final String NAME = "父类";
    // 静态成员变量和静态初始化块级别相同 所以按照在代码中的顺序依次执行
    // 1、初始化父 静态成员变量 static int sage
    static int sage = getNumber(50, NAME);
    // 2、初始化父 静态初始化块 static
    static {
        System.out.println("父类 base static block");
    }
    //5、初始化父类的非静态代码:非静态成员变量和非静态初始化块级别相同
    public int age = getNumber(100, NAME);
    //6、初始化块:非静态成员变量和非静态初始化块级别相同
    {
        System.out.println("父类 base nonstatic block");
    }
    //7、初始化父类构造函数
    Father() {
        System.out.println("父类 构造器 base start");
        System.out.println(age);
        draw();// 会调用子类覆盖后的方法
        System.out.println("父类 构造器 base end");
    }
    static int getNumber(int base, String name) {
        System.out.println(name + " base.getNumber int" + base);
        return base;
    }
    private void draw() {
        System.out.println("父类 base.draw");
    }
}

/**
 * 子类
 *
 * @author 张国明 [url=mailto:guomingzhang2008@163.com]guomingzhang2008@163.com[/url]
 * @version 2012-07-27 下午1:16
 */
public class Son extends Father {
    private static final String NAME = " 子类";
    // 静态成员变量和静态初始化块级别相同 所以按照在代码中的顺序依次执行 
    //3、初始化子 静态成员变量 static int sage
    static int sage = getNumber(250, NAME);
    //4、初始化子 静态初始化块 static
    static {
        System.out.println(" 子类 subclass static block");
    }
    //8、初始化子类的非静态代码:非静态成员变量和非静态初始化块级别相同
    public int age = getNumber(1001, NAME);
    //9、初始化子类的非静态代码:非静态成员变量和非静态初始化块级别相同
    private int _radius = getNumber(10, NAME);
    //10、初始化块:非静态成员变量和非静态初始化块级别相同
    {
        System.out.println(" 子类 subclass nonstatic block");
    }
    //11、初始化子类构造函数
    Son(int radius) {
        System.out.println(" 子类 构造器 base start");
        _radius = radius;
        draw();
        System.out.println(age);
        System.out.println(" 子类 initializeOrder initialized");
        System.out.println(" 子类 构造器 base end");
    }
    private void draw() {
        System.out.println(" 子类 initializeOrder.draw " + _radius);
    }
    /**
     * @param args args
     */
    public static void main(String[] args) {
        new Son(1000);
    }
}

分享到:
评论

相关推荐

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    Java类的执行顺序是编程过程中一个非常重要的概念,特别是在深入理解和优化代码性能时。本文将详细探讨Java类的加载、初始化、执行等步骤,并通过实例分析阿里面试中可能涉及的相关问题,结合流程图帮助理解这一过程...

    Java类的基本运行顺序

    本文将详细解析Java类的基本运行顺序,包括加载、初始化、执行等阶段,以及相关工具的运用。 首先,我们从类的生命周期开始。一个Java类的生命周期可以分为以下几个阶段: 1. **加载(Loading)**:当Java虚拟机...

    Java类的基本运行顺序-Java教程共1页.pdf.zi

    在这个"Java类的基本运行顺序"教程中,我们将深入探讨这个过程,了解一个Java类从加载到卸载的每一步。 1. **加载(Loading)**:当Java虚拟机(JVM)遇到一个新的类时,它首先会通过类加载器将类的.class文件读入...

    类执行顺序小结.doc

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

    Java虚拟机类加载顺序

    了解Java虚拟机类加载顺序对于深入理解Java程序的运行机制至关重要。通过掌握不同类加载器的功能和职责,开发者可以更好地管理应用程序的依赖关系,处理类加载相关的异常,并优化程序性能。希望本文能够帮助您更好地...

    Java类的完整构造执行顺序

    在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...

    Java类继承初始化顺序

    当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...

    java简单方法顺序调用注解

    标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法的执行顺序。这在某些场景下非常有用,比如初始化逻辑、测试脚本或者需要特定顺序执行的任务。下面我们将深入探讨如何实现这一功能。 首先,我们...

    java面试题-类的初始化顺序.doc

    类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。

    java 按顺序创建文件

    在Java编程语言中,按顺序创建文件涉及到一系列的文件操作步骤。主要使用到的类是`java.io`包中的`File`和`BufferedWriter`。`File`类用于处理文件路径,创建、删除文件等操作,而`BufferedWriter`则用于向文件中...

    由浅入深详解Java 类的实例化顺序

    java教程 由浅入深详解Java 类的实例化顺序 在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按...

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

    在JAVA编程语言中,程序的执行顺序是程序员需要掌握的关键概念之一,因为它直接影响到程序的行为。以下是关于JAVA程序执行顺序的详细解释: 1. **静态块**: 静态块是在类加载时执行的,它不依赖于类的实例。在...

    java程序初始化顺序

    在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...

    Java中的Static块与静态方法

    2. **只执行一次**:每个类的静态块在整个程序运行期间只执行一次。 3. **按出现顺序执行**:如果一个类中有多个静态块,它们将按照在源代码中出现的顺序依次执行。 ### 静态方法与静态块的区别与联系 虽然静态...

    Java学习~求三角形面积的顺序结构

    在Java编程语言中,顺序结构是最基础的程序控制结构之一,它按照代码的书写顺序逐行执行。在“Java学习~求三角形面积的顺序结构”这个主题中,我们将深入探讨如何利用Java来计算三角形的面积,并了解相关概念。 ...

    JAVA类集应用

    Java 类集(Collections)是Java编程语言中一个重要的组成部分,它包含了各种数据结构,如列表、集合、映射等,以及对这些数据结构进行操作的工具类。在本压缩包中,你将找到一系列关于Java类集应用的源码实例,这些...

    Java类加载器原理

    Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对...

    浅谈Java文件执行顺序、main程序入口的理解

    但是,如果Java文件中没有public类,那么系统无法自动添加main方法,JVM找不到入口点,运行会报错。 Java文件执行顺序是按照下面的顺序执行的: 1. JVM寻找入口点,也就是main方法。 2. JVM执行main方法,开始执行...

Global site tag (gtag.js) - Google Analytics