类加载分为三个过程:装载、链接、初始化。
1、装载的过程就是将class文件读入内存的过程,并且提取其中的类关键信息,比如:方法、变量等等。
2、链接中存在三个步骤:
a、进行字节码的检查,看是否符合class文件规范;
b、对类中的类变量进行分配空间,附初始值。此处专指基本类型。
c、对类中的引用变量进行分配空间。
3、初始化,现在的初始化才是真正的,将按照语句一句一句执行了。
也就是说,在初始化执行以前所有的类变量以及引用变量都是分配了存储空间的,只是他们的数值是不可信任的,也就是系统默认的数据。
将如下java程序
private static Singleton obj = new Singleton();
public static int counter1 ;
public static int counter2 = 0;
变为:
public static int counter1 ;
public static int counter2 = 0;
private static Singleton obj = new Singleton();
则执行结果则由
obj.counter1=1,obj.counter2=0
变成了
obj.counter1=1,obj.counter2=1.
分享到:
相关推荐
Java类加载器加载类次序依次为:JVM类加载器、扩展类加载器、系统类加载器、顾客自定义类加载器。其中,系统类加载器先加载。 2. 堆和栈的区别 栈存储基本数据类型和对象的引用,堆存储对象和数组。 二、String、...
Java源代码被编译成能够被任何JVM加载和执行的类文件。在被JVM加载之前,类文件可能是由网络传输而来。 类文件是独立于底层平台的,所以适用于更多的地方。它们由简洁的JVM字节码组成,这样能轻装上阵。类文件...
在实际开发中,需要注意BPP的依赖关系,确保它们正确地参与到Bean的生命周期中,同时避免因加载次序不当而导致的功能缺失或异常。通过精细的配置和合理的依赖管理,我们可以充分利用Spring的这种机制,实现高度定制...
4. **Java的安全机制**:Java提供了一套严格的类加载和执行机制,确保代码安全执行,防止恶意代码对系统造成破坏。例如,使用沙箱模型限制未经验证的代码权限。 5. **path、classpath、JAVA_HOME**:path是系统路径...
Java编程基础知识点 根据给定的文件信息,我们可以生成以下知识点: ...在 Java 中,静态变量的初始化是在类被加载时执行的。在本题中,静态变量 x 的初始化是在类被加载时执行的,x 的值将被设置为 15。
- 创建持久化类:持久化类是与数据库表对应的Java类,通常包含有注解来指示字段与数据库列的对应关系。 - 创建对象-关系映射文件:这个文件定义了Java类与数据库表的映射规则。 - 编写访问数据库的代码:使用...
在Java中,类加载器(Class Loader)负责加载类,确保安全性和内存管理。 4. **程序设计方法**:设计过程通常包括系统设计和结构设计两个阶段。在结构设计中,复杂的功能会被分解成一系列简单功能。如果处理功能...
2. **程序运行环境**:Java程序运行的环境次序是从操作系统开始,然后是Java程序,接着是Java运行时环境(JRE或JVM),最后是硬件。 3. **表达式计算**:表达式 `(short)10/10.2*2` 的结果是 `int` 类型。首先,...
例如,在`LinkedTransferQueue`类中,通过扩展`AtomicReference`并在类内部填充大量的`pad`字段,确保了两个引用不在同一个缓存行上,从而减少了多锁的竞争。 以上知识点涵盖了Java并发编程的核心内容,包括内存...
3. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。 4. 如果构造方法调用了其他构造方法,先执行其他方法。 5. 最后,执行构造方法。 Java实例域初始化方法和顺序是Java编程语言中非常重要的知识...
在计算机等级考试二级Java模拟练习中,涉及到的知识点广泛,涵盖了数据结构、程序设计原则、模块独立性、面向对象设计、数据库概念设计、内存管理、类加载器、字节码验证以及方法重载和重写等多个方面。以下是这些...
Java中的静态代码块是类级别的代码,它在类被加载到JVM(Java虚拟机)时执行,且只执行一次。这些代码块主要用于初始化类级别的变量,即静态变量。与静态方法不同,静态代码块是自动执行的,而静态方法需要通过类名...
JVM采用了“一次编写,到处运行”的理念,通过类加载、验证、准备、解析和执行等步骤来运行Java程序。 3. 命令行参数获取:通过`main`方法的字符串数组参数`args`获取,如`public static void main(String[] args)`...
load-on-startup表示Servlet在web应用启动阶段加载,数字代表了启动次序,如果项目使用了springmvc框架,可以调整该数字为2,放到springmvc框架后面启动加载,但实际上Servlet的启动次序并没有太大的关系。...
静态变量是属于类的,在类被加载时存储在内存方法区中,无论创建多少个对象,静态变量在内存中都只有一个份,常常通过类名点来访问。 抽象类和接口的区别 抽象类可以包含变量、常量、构造方法、普通方法、静态方法...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或...
3. **源文件定义次序**:Java源文件中,`package`语句应位于文件顶部,接着是`import`语句,然后才是类定义。因此,选项A和B都是不正确的,因为它们的`package`声明放在了其他类定义之后。 4. **整型常量**:Java中...
本文将深入探讨Servlet的方法执行次序以及相关的API,帮助你更好地理解和运用这些关键功能。 首先,让我们了解Servlet生命周期中的主要方法: 1. **init()**:Servlet初始化时调用此方法。在Servlet实例化后,容器...