`
accpzgp
  • 浏览: 13672 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java程序的加载过程

 
阅读更多

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
1、首先加载要创建对象的类及其直接与间接父类。
2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。
3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。
4、最后执行构造器,构造器执行完毕,对象生成。
提示:再次创建同类的对象时,类的加载不再进行,语句块(无论静态的、非静态的)只执行一次,加载完成后不再执行,创建子类对象时上述过程要先走父类的,一直递归到java.lang.object类。
下面的例子说明了上述加载规则,代码如下:
public class MyClassFather {
public MyClassFather() {
System.out.println("执行要创建对象类父类的构造器");
}
}

public class MyClass extends MyClassFather {
public MyClass() {
System.out.println("执行要创建对象类的构造器");
}

Unstatic u = new Unstatic();
final UnstaticFinal uf = new UnstaticFinal();
{
System.out.println("执行非静态语句块");
}
static {
System.out.println("执行静态语句块");
}
static final StaticFinal sf = new StaticFinal();
static Static s = new Static();
}

public class StaticFinal {
public StaticFinal() {
System.out.println("静态final的成员变量初始化");
}
}

public class Static {
public Static() {
System.out.println("静态非final的成员变量初始化");
}
}

public class UnstaticFinal {
public UnstaticFinal() {
System.out.println("非静态final的成员变量初始化");
}
}

public class Unstatic {
public Unstatic() {
System.out.println("非静态非final的成员变量初始化");
}
}

public class Sample10_16 {
public static void main(String[] args) {
new MyClass();
}
}

分析:
1、MyClass类定义了静态成员以及非静态成员,包括静态final/非final成员变量以及静态语句块;非静态final/非final成员变量以及非静态语句块,最后是该类的构造器。
2、MyClass类继承了MyClassFather类。
3、加载顺序:类——类中静态成员——类中非静态成员——构造器

执行结果:



分享到:
评论

相关推荐

    深入理解java类加载机制

    在类加载方面,我们将深入探讨Java程序的类加载原理和流程,包括加载、验证、准备、解析和初始化等五个环节的详细解析,并对其强调点进行详细讲解。我们将详细介绍Java虚拟机中类的生命周期并探讨类加载时的各种问题...

    个人亲测oracle触发器调用java程序

    LOADJAVA命令位于$ORACLE_HOME/bin目录下,使用该命令可以将Java程序加载到数据库中。例如: ``` loadjava -user jkt/jkt@orcl -o -v -f -r c:\OracleTriggerJava.java ``` 这将加载OracleTriggerJava.java文件到...

    Java零基础 - Java的加载与执行原理剖析.md

    - 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、源码编译机制。 2、类加载机制 ...系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类,当运行某个java程序时,会启动一个java虚拟机进程,两次运行

    Java程序设计复习题.docx.docx

    Java程序设计复习题 Java程序设计复习题全文共19页,当前为第1页。Java程序设计复习题全文共19页,当前为第1页。一、选择题: Java程序设计复习题全文共19页,当前为第1页。 Java程序设计复习题全文共19页,当前为第...

    Java服务器程序设计

    用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...

    《Java程序设计案例教程》教学课件09Java数据库编程.pptx

    图9-4 MySQL连接驱动加载完成 《Java程序设计案例教程》教学课件09Java数据库编程全文共26页,当前为第8页。 9.3 数据库操作技术 9.3.1 查询记录操作 【例9-1】在控制台显示从myDatabase数据库的student表中查询到...

    Java加载。jar包

    让我们假设有一个class字节码文件(比如Hello.class文件),那么在应用程序中,他是如何被加载进来,并形成一个类对象的呢?我们这篇文章的目的就是为了解释这个问题。 在java.lang包里有个ClassLoader类,...

    java课程设计 聊天室源代码

    java做的聊天室的源代码,程序加载后课直接运行。方便实用。

    java 程序设计 期中考试.doc

    2.Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free. ( × ) 3.Java有垃圾回收机制,内存回收程序可在指定的时间释放内存对象. ( × ) 4.构造函数用于创建类的实例对象,构造函数名...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

    最后需要说的是笔者的调试上面程序的环境:WIN2000 , JDK1.3,MS SQLSERVER编辑软件:EDITPLUS 2.01a(这最后的东西可不是废话,虽然早就了一些专业的JAVA开发工具,但是笔者建议JAVA初学者使用文本软件开发JAVA程序)...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    深入理解Java类加载.docx

    虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被...在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的 类加载的过程 类的个生命周期如下图:

    小白自己学习Java,记录Java基础.rar

    - 除了包含JVM以外还包含了运行java程序所必须的环境 - JRE = JVM+java系统类库(小零件) - JDK:java开发工具包 - 除了包含JRE以外还包含了开发java程序所必须的命令工具 - JDK = JRE+编译、运行等命令工具 ...

    Java高级程序设计实战教程第八章-Java数据库编程.pptx

    目前有许多DBMS产品,如DB2、Oracle、Microsoft SQL Server 、Sybase、Informix、MySQL等,Java程序需要访问这些数据库,并对数据进行处理。 Java高级程序设计实战教程第八章-Java数据库编程全文共12页,当前为第2页...

    Java虚拟机工作原理详解

    类加载过程可以分为以下几个步骤: * Loading:将类文件从文件系统加载到 JVM 的内存区域中。 * Verifying:检查载入的类文件是否符合 Java 规范和虚拟机规范。 * Preparing:为类变量分配内存,并设置默认值。 * ...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

Global site tag (gtag.js) - Google Analytics