你认为java虚拟机什么时候会创建一个对象?如果能回答出下面的问题,你就可以不用继续向下看了。
class A{
static final int a = 10;
static{
System.out.println( "initializing A" );
}
}
class B{
public static void main(String[] args){
System.out.println(A.a);
}
static{
System.out.println( "initializing B" );
}
}
我们调用B的main函数,会得到什么输出?
经过考虑后,你是不是认为应该得到:
"initializing B"
"initializing A"
10
这个结果?不对,其实结果是:
"initializing B"
10
嗯?A没有被实例化?
其实,java虚拟机会在6种情况下创建一个对象,分别是:
·创建类的新实例
·调用类中声明的静态方法
·操作类或接口中声明的非常量静态字段
·调用Java API中特定的反射方法
·初始化一个类的子类
·制定一个类作为Java虚拟机启动时的初始化类
java虚拟机只有在第一次主动使用一个类的情况下才会初始化该类。在以上6种情况下,虚拟机认为正在主动使用该类,所以会对其进行初始化,记住这6条,SCJP可能会出现(只是如果,可能考试不会涉及到虚拟机一层)
顺便说一下,任何一个类的初始化都要求它的所有祖先类(非祖先接口)预先被初始化,而接口的初始化则不需要祖先接口预先被初始化。
分享到:
相关推荐
1. **加载与链接**:Java虚拟机(JVM)首先检查类是否已经被加载和链接。如果未加载,JVM会通过类加载器找到对应的`.class`文件,进行加载和链接。加载包括找到类的二进制数据,而链接则包括验证、准备和解析三个...
JVM(Java虚拟机)为每一个运行中的Java应用程序提供了一个唯一的运行环境。JVM的内存主要被划分为三个区域:堆区、栈区和方法区。堆区(Heap)是存放通过new关键字创建的对象实体的地方,这些对象实体在堆中拥有...
Java程序在JVM(Java Virtual Machine,Java虚拟机)上运行,JVM作为一个平台无关的执行环境,负责Java程序的内存管理和执行。理解Java内存分配原理有助于优化程序性能,避免内存泄露等问题。 在JVM中,内存主要...
**JVM(Java虚拟机)**是Java平台的核心组件之一,它为Java程序提供了执行环境,确保了程序可以在不同硬件和操作系统上运行而无需修改代码。 - **关键作用**: - **跨平台性**:通过将Java源代码编译为中间代码...
Java的跨平台特性主要得益于其运行于Java虚拟机(JVM)上的机制,这一机制确保了Java代码能够在不同的操作系统上无差别地运行,从而实现了代码的“一次编写,到处运行”。Java的主要应用方向包括嵌入式系统开发、...
Java虚拟机(JVM)是Java语言的运行平台。JVM可以管理异常的生命周期,提供了强大的功能和灵活的特性。 六、高并发问题 高并发问题是指在高并发情况下系统出现的问题。解决高并发问题可以使用分布式流量分发、同步...
堆内存是Java虚拟机(JVM)用于存储所有对象实例的地方。当一个对象被创建时,其数据将被分配到堆内存中。堆内存的特点是动态分配,即对象的大小在创建时不确定,且对象的生命周期也较难预测。由于这些特性,堆内存的...
Java类加载原理是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从磁盘或网络中加载到内存,并转化为运行时的数据结构,以便执行程序代码。本文将深入探讨类加载机制,包括加载、连接、初始化三个主要...
在可移植性上,Java的“一次编写,到处运行”(Write Once, Run Anywhere, WORA)特性使得Java程序可以在任何支持Java虚拟机(JVM)的平台上运行,而无需重新编译。相比之下,C语言程序需要针对目标平台进行编译,...
- Java虚拟机(JVM)会终止当前线程中已经开始但尚未结束的表达式、语句、方法调用等,直到找到一个能够处理该异常的异常处理句柄。 - 如果没有找到合适的处理句柄,则会调用当前线程的父线程`ThreadGroup`的`...
Dalvik虚拟机是专为Android设计的虚拟机,不同于传统的Java虚拟机(JVM),它采用寄存器架构而非栈架构,旨在减少内存占用,适应移动设备的硬件限制。在Android 2.2版本中,Dalvik虚拟机引入了JIT技术,这一技术通过...
Java虚拟机(JVM)负责执行垃圾回收,但其工作原理对于优化程序性能至关重要。 1、`finalize()`方法: `finalize()`方法是Java中的一个特殊方法,由`Object`类定义,但并不直接与垃圾回收有关。当对象不再被引用时...
当Java虚拟机(JVM)启动并加载了一个包含`main()`方法的类时,它会自动调用这个方法来开始程序的执行流程。接下来,我们将详细探讨`main()`方法的各种特性和注意事项。 #### 二、main()方法的基本定义 `main()`方法...
Java采用了“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的理念,这得益于Java虚拟机(JVM)。开发者可以在任何安装了JVM的操作系统上运行Java程序,无论是Windows、Linux还是Mac OS,大大提高了软件的...
进入正题前首先要知道的是Java程序运行在JVM(JavaVirtualMachine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的...
Java源代码被编译成中间码,这种中间码再由Java虚拟机(JVM)解释执行,JVM可以根据不同平台的具体实现进行调整,从而实现平台无关性。 安全性同样是Java语言非常重视的特点,尤其是在网络环境中。Java提供了丰富的...
按照 JVM 调优机制,首先会在堆内存创建类的实例,然后将此对象的引用压入调用栈,继续执行。这是 JVM 优化前的方式。 通过逃逸分析,JVM 能够对栈的重新分配方式进行优化,首先找出未逃逸的变量,将该变量直接存到...
由于Java的“一次编写,到处运行”(Write Once, Run Anywhere)理念,Applet可以在任何支持Java虚拟机(JVM)的设备上运行,无论操作系统是Windows、Mac还是Linux。这在早期网络环境中,极大地促进了不同系统间的...