`
nicegege
  • 浏览: 589509 次
  • 性别: 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 类加载-初始化 过程

    java JVM 类加载-初始化 过程

    深入java虚拟机(三)——类的生命周期(下)类的初始化1

    在Java虚拟机(JVM)中,类的初始化会在类加载和连接完成后发生。 初始化阶段的目标是确保类的静态成员被正确地初始化。有两种主要的方式进行类的初始化: 1. **静态变量的声明处赋值**:这是最直接的方式,如`...

    Java虚拟机JVM类加载初始化

    Java虚拟机JVM类加载初始化是Java程序运行过程中的关键环节,它负责将类的字节码文件加载到内存中并进行相应的处理,以便程序能够正确执行。在Java中,类加载器(Classloader)扮演着核心角色。下面将详细讨论类加载...

    java程序初始化顺序

    在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...

    Java静态初始化块和对象初始化块

    例如,如果一个类需要在程序运行前设置一个常量数组,静态初始化块就是合适的选择。 ```java public class InitFiledBlockStatic { static int[] staticArray; static { // 静态初始化块中的代码 staticArray ...

    java代码的初始化顺序demo

    在Java编程语言中,类和对象的初始化是一个关键的概念,对于理解和编写健壮的程序至关重要。这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载...

    java中类的初始化顺序

    ### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...

    Java初始化块Java初始化块.doc

    总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...

    探究java的ClassLoader及类变量初始化顺序

    理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...

    Java起航 ---- 类的初始化历程

    本篇文章将深入探讨“Java起航——类的初始化历程”,并结合JVM(Java虚拟机)的工作原理,帮助你更好地理解这个过程。 首先,我们需要了解Java类的生命周期,它包括加载、验证、准备、解析和初始化五个阶段。当一...

    java初始化和清理

    首先,Java初始化的主要特性表现在类的加载过程上。与其他一些传统编程语言(如C++)不同,Java的类并不是在程序启动时立即加载的。Java类是在需要使用时,比如创建对象、访问静态域或静态方法时,才会被加载。这种...

    java-jvm虚拟机原理.ppt

    初始化则执行类的静态初始化块。对象的生命周期始于分配内存,结束于垃圾收集器的回收。 JVM的动态连接和解析机制允许类在运行时进行加载和链接,提供灵活性。这使得Java能够实现“热部署”和“动态加载”。 垃圾...

    详解Java的初始化与清理

    本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即内存的自动清理。 首先,让我们详细了解一下Java中的构造器初始化。构造器是Java中用于初始...

    java代码初始化流程研究

    Java代码的初始化流程是编程者在开发过程中需要深入了解的关键环节,它涉及到类加载、静态变量初始化、构造函数执行等多个步骤。下面将详细讲解这个过程。 首先,Java代码的执行始于类加载。当程序运行时,Java...

    JVM(Java 虚拟机)的详细讲解

    类加载是JVM启动后的第一个操作,它通过类加载器将.class文件加载到内存中,并对其进行解析和初始化。类加载过程包括三个阶段:加载、链接和初始化。 1. **加载**:查找并加载类的二进制数据。 2. **链接**: - ...

    使用C++创建java虚拟机JVM,使用JNI调用java函数.zip

    2. **初始化JVM**:找到JVM库后,需要使用`JNI_CreateJavaVM`函数来创建并初始化一个JVM实例。这个函数需要提供一个`JavaVMInitArgs`结构体,其中包含了JVM的启动参数,如是否启用调试等。 3. **获取JNIEnv指针**:...

    JVM.rar_java 工作流_java 虚拟机_jvm_jvm hook_虚拟机 Java

    在深入理解JVM的工作流程之前,我们首先需要知道Java程序是如何被编译和运行的。Java源代码(.java文件)通过Java编译器(javac)被编译成Java字节码(.class文件),这些字节码可以在任何安装了JVM的平台上运行,...

    java基础之JVM

    通过在不同的平台上实现JVM,开发者只需要编写一次Java代码,便可以在任何支持JVM的操作系统上运行。这种特性极大地简化了开发过程,并降低了维护成本。 **1.2 JVM由哪些部分组成?** JVM主要由以下四个关键组件...

Global site tag (gtag.js) - Google Analytics