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程序在多线程环境中的安全性和隔离性。类加载器的设计遵循双亲委派模型,它分为三个主要部分:启动类加载器、扩展类加载器和应用类加载器。 #### 二、类加载过程 类...
此图片可能包含关于JDBC驱动加载过程或数据库操作的可视化表示,帮助理解概念。 总的来说,加载JDBC驱动是Java应用程序与数据库交互的关键步骤,涉及对Java类加载机制的理解以及对JDBC API的正确使用。通过`Class....
总结来说,Java应用程序类加载器是Java程序执行的关键部分,它负责在运行时找到并加载类,而它的灵活性和可配置性为开发者提供了强大的能力来适应各种复杂的应用场景。理解并掌握类加载器的工作原理,能帮助我们更好...
### Java程序中加载动态链接库文件 #### 一、引言 在开发Java应用程序时,有时需要调用一些底层硬件接口或执行特定平台的操作,这些功能通常无法仅通过纯Java代码实现。这时,就需要借助于Java Native Interface ...
Java程序的动态性主要体现在可以运行时动态加载和创建类。这种特性通过`java.lang.Class`类和`java.lang.ClassLoader`类的几个方法实现: - **隐式加载**:使用`new`关键字实例化类时,类加载器自动按需加载类。 - ...
传统的Java程序修改后,必须重新编译并启动JVM才能看到效果,这对于频繁修改和调试的开发过程来说非常不便。 针对这个问题,Java社区提供了多种热加载解决方案。其中,最著名的是JRebel和DCEVM(Dynamic Class File...
#### 五、类加载过程详解 类加载的过程主要分为三个阶段:加载(Loading)、连接(Linking)和初始化(Initialization)。 1. **加载**(Loading): - 类加载器查找并加载类的二进制流。 - 创建`java.lang....
在Java编程语言中,动态加载jar包是一种常见的需求,它允许程序在运行时根据需要加载新的功能或更新现有的模块,增强了软件的灵活性和可扩展性。动态加载jar包技术主要涉及Java的反射机制、类加载器和插件系统。下面...
### Java虚拟机与Java程序的生命周期 ...了解类的加载过程对于理解Java程序的执行流程、优化性能等方面具有重要意义。同时,掌握Java程序的生命周期有助于更好地控制程序的运行状态,提高程序的健壮性和效率。
Java 类加载器原理 Java 类加载器是Java虚拟机...类加载器的机制保证了Java的类加载过程是有序且安全的,同时也支持了Java的动态加载和模块化特性。在自定义类加载器时,需要遵循这些规则,以便正确地扩展JVM的功能。
配置加载的流程通常如下: 1. 应用程序请求加载特定类型的配置。 2. 使用ConfigProviderFactory创建匹配的IConfigProvider实例,指定配置来源(如XML、Properties等)。 3. 调用IConfigProvider的`provide()`方法...
在类加载过程中,我们可以利用这个机制实现热加载。 2. 类加载器 Java的类加载器分为Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)。...
在Java中,类加载过程分为加载、验证、准备、解析和初始化五个阶段。 首先,让我们了解Java中的默认类加载器体系: 1. **Bootstrap ClassLoader**:这是最基础的类加载器,由JVM自身实现,通常用于加载`<JAVA_HOME...
理解这一机制对于进行Java程序设计和优化至关重要,特别是在处理类的动态加载、插件系统和模块化系统时。 总的来说,Java类加载流程是一个复杂但有序的过程,双亲委派模型是其核心设计。通过流程图的分析,我们可以...
Java类加载机制是Java程序运行的第一步,它对于理解Java虚拟机(JVM)的行为至关重要。类加载过程涉及到类的加载、链接(验证、准备、解析)、初始化等阶段,并且这一过程是由类加载器系统完成的。 #### 二、类加载...
在Java编程中,有时我们需要动态地加载...总之,Java自动加载JAR文件并运行其中的类方法是一项实用的技术,它增强了Java程序的灵活性和可扩展性。通过理解和掌握这些技术,开发者能够构建出更加强大和灵活的应用系统。
Java 类加载器是Java运行时环境的一个重要组成部分,它的主要职责是将编译后的字节码(.class文件)加载到JVM中,使得程序能够运行。类加载器的机制保证了类的唯一性,同时也提供了灵活性,允许我们自定义加载逻辑。...
Java类加载机制和SPI(ServiceProviderInterface)机制是Java平台中极其重要的两个概念,它们对于Java程序的灵活性和可扩展性起到关键作用。下面详细解释这两个机制的概念、原理和应用场景。 类加载机制是Java...