你认为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可能会出现(只是如果,可能考试不会涉及到虚拟机一层)
顺便说一下,任何一个类的初始化都要求它的所有祖先类(非祖先接口)预先被初始化,而接口的初始化则不需要祖先接口预先被初始化。
分享到:
相关推荐
实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)
实战JAVA虚拟机 JVM故障诊断与性能优化
实战JAVA虚拟机 JVM故障诊断与性能优化
非扫描版 文字版高清 可以复制
实战Java虚拟机 JVM故障诊断与性能优化 葛一鸣 原书code
Java 虚拟机JVM内存模型与垃圾收集策略,看完此资料,JVM将不再话下
前言Java是目前用户最多、使用范围最广的软件开发技术之一。Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、Ja
实战JAVA虚拟机 JVM故障诊断与性能优化带源码 实战JAVA虚拟机 JVM故障诊断与性能优化带源码
本书摒弃了传统的以解读枯燥的Java虚拟机规范文档和分析繁琐的Java虚拟机源代码的方式来讲解Java虚拟机,取而代之的是,以实践的方式,引导读者如何从零开始构建和实现一个Java虚拟机,整个过程不仅能让读者做到对...
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
本资料主要是讲解了Java虚拟机的机制,jvm设计原理与实现
Java虚拟机JVM面试题目
从源码角度解读HotSpot的内部实现机制,本书主要包含三大部分——JVM数据结构设计与实现、执行引擎机制及内存分配模型
Java虚拟机jvm面试题
java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优
深入Java虚拟机JVM类加载学习笔记:jvm java classloader 垃圾回收 gc
希缺的WinCE上的java虚拟机JVM creme