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)中,类的初始化会在类加载和连接完成后发生。 初始化阶段的目标是确保类的静态成员被正确地初始化。有两种主要的方式进行类的初始化: 1. **静态变量的声明处赋值**:这是最直接的方式,如`...
Java虚拟机JVM类加载初始化是Java程序运行过程中的关键环节,它负责将类的字节码文件加载到内存中并进行相应的处理,以便程序能够正确执行。在Java中,类加载器(Classloader)扮演着核心角色。下面将详细讨论类加载...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
例如,如果一个类需要在程序运行前设置一个常量数组,静态初始化块就是合适的选择。 ```java public class InitFiledBlockStatic { static int[] staticArray; static { // 静态初始化块中的代码 staticArray ...
在Java编程语言中,类和对象的初始化是一个关键的概念,对于理解和编写健壮的程序至关重要。这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...
理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...
本篇文章将深入探讨“Java起航——类的初始化历程”,并结合JVM(Java虚拟机)的工作原理,帮助你更好地理解这个过程。 首先,我们需要了解Java类的生命周期,它包括加载、验证、准备、解析和初始化五个阶段。当一...
首先,Java初始化的主要特性表现在类的加载过程上。与其他一些传统编程语言(如C++)不同,Java的类并不是在程序启动时立即加载的。Java类是在需要使用时,比如创建对象、访问静态域或静态方法时,才会被加载。这种...
初始化则执行类的静态初始化块。对象的生命周期始于分配内存,结束于垃圾收集器的回收。 JVM的动态连接和解析机制允许类在运行时进行加载和链接,提供灵活性。这使得Java能够实现“热部署”和“动态加载”。 垃圾...
本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即内存的自动清理。 首先,让我们详细了解一下Java中的构造器初始化。构造器是Java中用于初始...
Java代码的初始化流程是编程者在开发过程中需要深入了解的关键环节,它涉及到类加载、静态变量初始化、构造函数执行等多个步骤。下面将详细讲解这个过程。 首先,Java代码的执行始于类加载。当程序运行时,Java...
类加载是JVM启动后的第一个操作,它通过类加载器将.class文件加载到内存中,并对其进行解析和初始化。类加载过程包括三个阶段:加载、链接和初始化。 1. **加载**:查找并加载类的二进制数据。 2. **链接**: - ...
2. **初始化JVM**:找到JVM库后,需要使用`JNI_CreateJavaVM`函数来创建并初始化一个JVM实例。这个函数需要提供一个`JavaVMInitArgs`结构体,其中包含了JVM的启动参数,如是否启用调试等。 3. **获取JNIEnv指针**:...
在深入理解JVM的工作流程之前,我们首先需要知道Java程序是如何被编译和运行的。Java源代码(.java文件)通过Java编译器(javac)被编译成Java字节码(.class文件),这些字节码可以在任何安装了JVM的平台上运行,...
通过在不同的平台上实现JVM,开发者只需要编写一次Java代码,便可以在任何支持JVM的操作系统上运行。这种特性极大地简化了开发过程,并降低了维护成本。 **1.2 JVM由哪些部分组成?** JVM主要由以下四个关键组件...