`
3806850
  • 浏览: 93308 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

java程序执行顺序 类的加载顺序

    博客分类:
  • java
阅读更多
java程序执行顺序  

一。JAVA中执行顺序


1.静态块
2.块
3.构造器
4.父类构造器

    二。JAVA中赋值顺序


     1. 静态块直接赋值
     2. 块直接赋值
     3. 父类继承的属性已赋值
     4. 静态变量声明时赋值
     5. 成员变量声明时赋值
     6. 构造器赋值
文章   http://java-mzd.iteye.com/blog/838683


类的加载顺序

类的加载顺序
什么时候类加载
第一次需要使用类信息时加载。
类加载的原则:延迟加载,能不加载就不加载。

触发类加载的几种情况:
(1)、调用静态成员时,会加载静态成员真正所在的类及其父类。
通过子类调用父类的静态成员时,只会加载父类而不会加载子类。
(2)、第一次 new 对象的时候 加载(第二次再 new 同一个类时,不需再加载)。
(3)、加载子类会先加载父类。(覆盖父类方法时所抛出的异常不能超过父类定义的范围)
注:如果静态属性有 final 修饰时,则不会加载,当成常量使用。
例:public static final int a =123;
但是如果上面的等式右值改成表达式(且该表达式在编译时不能确定其值)时则会加载类。
例:public static final int a = math.PI
如果访问的是类的公开静态常量,那么如果编译器在编译的时候能确定这个常量的值,就不会被加载;
如果编译时不能确定其值的话,则运行时加载


类加载的顺序:
1.加载静态成员/代码块:
先递归地加载父类的静态成员/代码块(Object的最先);再依次加载到本类的静态成员。
同一个类里的静态成员/代码块,按写代码的顺序加载。
如果其间调用静态方法,则调用时会先运行静态方法,再继续加载。同一个类里调用静态方法时,可以不理会写代码的顺序。
调用父类的静态成员,可以像调用自己的一样;但调用其子类的静态成员,必须使用“子类名.成员名”来调用。
2.加载非静态成员/代码块:(实例块在创建对象时才会被加载。而静态成员在不创建对象时可以加载)
先递归地加载父类的非静态成员/代码块(Object的最先);再依次加载到本类的非静态成员。
同一个类里的非静态成员/代码块,按写代码的顺序加载。同一个类里调用方法时,可以不理会写代码的顺序。
但调用属性时,必须注意加载顺序。一般编译不通过,如果能在加载前调用,值为默认初始值(如:null 或者 0)。
调用父类的非静态成员(private 除外),也可以像调用自己的一样。
3.调用构造方法:
先递归地调用父类的构造方法(Object的最先);默认调用父类空参的,也可在第一行写明调用父类某个带参的。
再依次到本类的构造方法;构造方法内,也可在第一行写明调用某个本类其它的构造方法。
注意:如果加载时遇到 override 的成员,可看作是所需创建的类型赋值给当前类型。
其调用按多态用法:只有非静态方法有多态;而静态方法、静态属性、非静态属性都没有多态。
假设子类override父类的所有成员,包括静态成员、非静态属性和非静态方法。
由于构造子类时会先构造父类;而构造父类时,其所用的静态成员和非静态属性是父类的,但非静态方法却是子类的;
由于构造父类时,子类并未加载;如果此时所调用的非静态方法里有成员,则这个成员是子类的,且非静态属性是默认初始值的。 

文章
http://hi.baidu.com/yuxueren/blog/item/415b8401d2260a0c1d958398.html
分享到:
评论

相关推荐

    Java虚拟机类加载顺序

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

    java应用程序类加载器,ClassLoader for java Application

    总结来说,Java应用程序类加载器是Java程序执行的关键部分,它负责在运行时找到并加载类,而它的灵活性和可配置性为开发者提供了强大的能力来适应各种复杂的应用场景。理解并掌握类加载器的工作原理,能帮助我们更好...

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

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

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

    java 继承关系的加载顺序

    了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. 类加载机制 Java的类加载过程分为三个主要阶段:加载、验证、准备、解析和初始化。当一个类被首次引用时(例如...

    Java类加载器原理

    类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对类加载器原理的详细解释: 1. 类加载器作用: 当JVM启动时,如果需要使用某个类,对应的类加载器会将这个类...

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

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

    java程序初始化顺序

    以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...

    Java类的基本运行顺序

    在Java中,类的加载顺序遵循“父类优先”原则,即子类在初始化前,其父类必须先完成初始化。同时,如果一个类没有显式地定义初始化块,JVM会自动提供一个空的方法。 至于文件`任务安排表.xls`,虽然与Java类的运行...

    Java类加载初始化的过程及顺序

    Java类加载初始化的过程及顺序 Java类加载初始化的过程是Java编程语言中一个重要的概念,它...通过这个示例,我们可以看到Java类加载初始化的过程和顺序,它们之间是如何相互作用的,以及如何影响Java程序的执行结果。

    类加载的工具

    在Java编程语言中,类加载器(ClassLoader)是运行时环境的重要组成部分,它负责将类的字节码从各种来源(如硬盘、网络或内存)加载到Java虚拟机(JVM)中,使得程序能够执行。类加载工具则是辅助开发者理解和分析类...

    Java类的完整构造执行顺序

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

    Java 类在 Tomcat 中是如何加载的(过程分析)

    Java 类在 Tomcat 中的加载过程是一个关键的环节,它涉及到如何有效地管理和执行Web应用程序的类。理解这一过程对于开发和调试基于Java的Web应用程序至关重要。以下是对标题和描述中所述知识点的详细解释: 1. **类...

    详解Java中类的加载顺序

    总结来说,Java中类的加载顺序是基于以下规则的: - 首次使用类时,加载类并初始化静态部分。 - 创建类的实例时,按照继承顺序从父类到子类初始化非静态部分。 - 对象销毁时,先执行子类的`finalize`,再执行父类的`...

    类,对象,成员加载的顺序

    java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序

    Java类加载机制学习1

    这时,自定义类加载器如`ParentLastClassLoader.java`可以帮助我们实现这个目标,通过改变类加载顺序,使得新的类加载器可以加载新的类而不影响旧的代码。 线程上下文类加载器(Thread Context ClassLoader)是Java...

    Java中类的加载顺序剖析(常用于面试题)

    这些方法的执行顺序取决于我们如何在代码中调用它们,与类的加载顺序无关。 5. **静态方法的调用**: 类的静态方法可以通过类名直接调用,无需创建实例。`bTest()`和`aTest()`这样的静态方法会在类加载时就可以...

    Java中类的加载顺序

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

    JVM类加载机制详细讲解

    为了更好地理解这一过程,我们可以创建一个自定义类加载器,并观察加载顺序。通过重写 `findClass()` 方法,我们可以打印出加载类的路径,从而跟踪加载过程。这将显示类是如何按照双亲委派模型逐级传递的。 1.4 ...

Global site tag (gtag.js) - Google Analytics