`
nicegege
  • 浏览: 579334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm把java类初始化需要做哪些工作?

 
阅读更多

1.有两个类,A类为:

public class A {
	private static A a=new A();//必须要先初始化类
	private static B b=B.getInstance();
	private A(){}
	public static A getInstance(){
		System.out.println("A被调用了...."+a);		
		return a;
	}
	public void test(){
		System.out.println("A类中的b:"+b);
		
		
	}
}

 

B类为:

public class B {
	private static B b=new B();//必须要先初始化类
	private static A a=A.getInstance();
	
	private B(){
		
	}
	public static B getInstance(){
		System.out.println("B被调用了...."+b);
		return b;
	}
	public void test(){		
		System.out.println("B类中的a:"+a);
	}
}

 还有一个测试类C:

public class C {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		B b=B.getInstance();
		b.test();
		System.out.println("=====");
		B b1=B.getInstance();
		b1.test();
		System.out.println("=====");
		B b2=B.getInstance();
		b2.test();
		
		A a=A.getInstance();
		a.test();
		
		System.out.println("----------");
		A a1=A.getInstance();
		a1.test();
		

	}

}

 总结:这是javaeye上看到的一个帖子http://hllvm.group.iteye.com/group/topic/25526,感觉这个问题很有意思,可以推敲一下。java类初始化的时候,jvm优先考虑静态成员变量的初始化,然后才是构造函数,所以刚开始以为这两个类的实例化是一个死循环,后来发现jvm对所有类只初始化一次,这样就不会出现死循环了。但是关于jvm到底怎么初始化类的过程,很让人着迷。网上看到一个不错的文章分享了http://www.webspherechina.net/?viewnews-51644.html

分享到:
评论

相关推荐

    Java虚拟机JVM类加载初始化

    当一个类被加载、连接、初始化后,它的生命周期就开始了,当代表该类的Class对象不再被引用、即已经不可触及的时候,Class对象的生命周期结束。那么该类的方法区内的数据也会被卸载,从而结束该类的生命周期。一个类...

    JVM 面试题总结.md

    - 初始化 - 使用 - 卸载 - 在 JVM 中,对象是如何创建的? - 内存分配方式有哪些呢? - 请你说一下对象的内存布局? - 对象头 Header - 实例数据 Instance Data - 对齐 Padding - 对象访问定位的方式有...

    《剑指offer》JVM面试题总结.pdf

    初始化 使用 卸载 在 JVM 中,对象是如何创建的? 内存分配方式有哪些呢? 请你说一下对象的内存布局? 对象头 Header 实例数据 Instance Data 对齐 Padding 对象访问定位的方式有哪些? 如何判断对象已经死亡? ...

    编程文档JVM、Java基础、.rar

    对象初始化 编译 JiT:即时编译 两大无关性 平台无关性: 每一台平台解释器不同,但是虚拟机相同,跨平台的原因。 一个程序对应一个虚拟机,多个程序对应多个虚拟机, 虚拟机之间数据不共享 什么是平台:操作系统...

    解析Java类和对象的初始化过程

    类的初始化和对象初始化是JVM管理的类型生命周期中非常重要的两个环节,Google了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和JVM层次来分析的文章更是鲜有所见...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    虚拟机类加载机制 / 171 7.1 概述 / 171 7.2 类加载的时机 / 172 7.3 类加载的过程 / 176 7.3.1 加载 / 176 7.3.2 验证 / 178 7.3.3 准备 / 181 7.3.4 解析 / 182 7.3.5 初始化 / 186 7.4 类加载器 ...

    Java类的加载、链接和初始化

     我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的是把Java字节代码转换成JVM中的java.lang.Class类的对象。这样Java可以对该对象进行一系列操作,装载过程有两个比较重要的特征:层次...

    java相关的2024面试题集锦

    - 使用Java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化 - 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化 - 当虚拟机...

    Java + 数组 + 初始化

    Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言. Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行; Java程序易于编写,而且有...

    03.Java对象初始化1

    1. java的对象都是通过new指令开始,先会根据指令参数【操作数】在常量池 2. 如果没有定位到这个符号引,那么这个类就没有被加载,就需要jvm进类 3.

    java数组初始化笔试题-yvm:[yvm]低性能垃圾回收jvm

    java数组初始化笔试题 | | | | | 这是一个用 C++ 编写的自制 Java 虚拟机,它支持大多数 Java 语言功能,并包含一个基于标记清除的并发垃圾收集器。 此 VM 的主要组件符合 . 它是可运行的,各种语言功能将逐步添加到...

    java类加载机制.xmind

    该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...

    类加载与类初始化

    JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成 JVM可以直接使用的Java类型的过程。 \quad·加载 \quad\quad将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时...

    java虚拟机规范高清中文版本(java SE 8版本)

    第1章 :简单地介绍了Java虚拟机的历史并... 第5章:定义了Java虚拟机启动以及类和接口的加载、链接和初始化的过程; 第6章:定义了Java虚拟机指令集; 第7章:提供了一张以操作码值为索引的Java虚拟机操作码助记表。

    疯狂JAVA讲义

    5.3.2 成员变量的初始化和内存中的运行机制 128 5.3.3 局部变量的初始化和内存中的运行机制 130 5.3.4 变量的使用规则 130 5.4 隐藏和封装 132 5.4.1 理解封装 132 5.4.2 使用访问控制符 132 5.4.3 package和...

    JVM工作原理及内存管理机制

    在执行方法时JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四种指令来执行 ...(4)invokespecial:JVM对于初始化对象(Java构造器的方法为:)以及调用对象实例中的私有方法时。

    java面试宝典

    76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【JVM】类的初始化 58 类什么时候才被初始化: 58 类的初始化步骤: 59 【*JVM】什么是JVM线程死锁?JVM线程死锁,你该如何判断是因为什么?如果用VisualVM,dump线程信息出来,会有哪些信息? 59 【*JVM】查看jvm...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第92节类加载的过程-初始化00:19:41分钟 | 第93节类加载器00:22:41分钟 | 第94节双亲委派模型00:17:03分钟 | 第95节运行时栈帧结构00:08:46分钟 | 第96节局部变量表00:20:48分钟 | 第97节操作数栈00:08:36分钟 ...

    java虚拟机2021面试题第二季

    4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类加载和运行时扩展。 5. JIT编译:JVM还具备即时编译(Just-In-Time Compilation)的能力,它可以根据运行时...

Global site tag (gtag.js) - Google Analytics