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

Java 初始化及类的加载

    博客分类:
  • Java
阅读更多
下面是Think in Java中的一段代码,自己加了几行
package reusing;

import static net.mindview.util.Print.*;

class Insect {
	private int i = 9;
	protected int j;
	
	private int x2 = printInit("Insect.x1 initialized");

	Insect() {
		print("i = " + i + ", j = " + j);
		j = 39;
	}
	static {
		System.out.println("Init Static block");
	}
	
	{
		System.out.println("Init block");
	}

	private static int x1 = printInit("static Insect.x1 initialized");

	static int printInit(String s) {
		print(s);
		return 47;
	}
}

public class Beetle extends Insect {
	private int k = printInit("Beetle.k initialized");
	
	static {
		System.out.println("Beetle static block");
	}

	public Beetle() {
		print("k = " + k);
		print("j = " + j);
	}

	private static int x2 = printInit("static Beetle.x2 initialized");
	private int x1 = printInit("Beetle.x2 initialized");

	
	public static void main(String[] args) {
		print("Beetle constructor");
		Beetle b = new Beetle();
	}
	
}


分析其类加载的过程:
         (1)首先加载当前类,再加载当前类的父类,直到加载到基类,然后执行基类的static代码块,再执给基类里面的static成员变量赋值,赋值完成之后再执行子类里面的static代码块和给static成员变量赋值,以此类推。
(2)static块和成员赋值为完成之后回到基类中,给其余的非static的成员变量赋值,再执行非静态块,然后是构造方法,完成之后回到子类中继续按(2)处执行

上面的代码执行结果是:
Init Static block
static Insect.x1 initialized
Beetle static block
static Beetle.x2 initialized
Beetle constructor
Insect.x1 initialized
Init block
i = 9, j = 0
Beetle.k initialized
Beetle.x2 initialized
k = 47
j = 39
分享到:
评论

相关推荐

    java 初始化与方法

    Java初始化与方法是Java编程语言中的核心概念,它们在程序执行过程中起着至关重要的作用。本文将深入探讨Java中的初始化过程、方法的定义与调用,以及与之相关的源码和工具应用。 首先,让我们从类的初始化开始。在...

    Java虚拟机JVM类加载初始化

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

    java程序初始化顺序

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

    解析Java虚拟机中类的初始化及加载器的父委托机制共14页

    Java虚拟机(JVM)是Java程序运行的核心,它的内部机制包括了类的加载、链接、初始化等关键过程。在Java编程中,了解这些过程对于优化程序性能、理解和解决类加载问题至关重要。本文将深入探讨Java虚拟机中的类初始...

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

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

    java面试题-类的初始化顺序.doc

    此外,静态初始化块只在类加载时执行一次,而初始化块(也称为实例初始化块)会在每次创建类的新实例时执行。这意味着静态成员和静态初始化块对于所有类的实例都是共享的,而实例成员和实例初始化块则是每个对象独有...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    Java类加载器:静态变量初始化.docx

    Java 类加载器静态变量初始化机制详解 Java 类加载器是 Java 语言的核心组件之一,负责将 Java 字节码文件加载到内存中,以便 JVM 可以执行它们。在 Java 中,类加载器是通过委派机制来实现的,即一个类加载器可以...

    java类加载器

    3. **初始化**:执行类构造器`()`方法,为类变量赋初始值。 #### 三、类与类加载器的关系 类加载器对于确定类在JVM中的唯一性至关重要。两个类只有当它们来自相同的类加载器时才被认为是相同类的不同实例。这意味...

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

    静态初始化块是以`static`关键字标识的代码块,它在类被加载到Java虚拟机(JVM)时执行,且只执行一次。静态初始化块常用于设置类级别的变量,或者执行只应执行一次的初始化操作。例如,如果一个类需要在程序运行前...

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

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

    Java类继承初始化顺序

    静态初始化块用于初始化类级别的静态变量,它们只在类加载时执行一次。 2. **成员变量初始化**:接下来,初始化父类的非静态成员变量,这是通过调用父类的构造器实现的。Java规定每个子类实例在构造之前必须先调用...

    java中类的初始化顺序

    3. **父类静态成员变量及初始化块**:如果当前类继承自另一个类,则父类的静态成员变量和静态初始化块会在子类之前被初始化。 4. **实例成员变量的默认初始化**:创建对象时,默认情况下,实例成员变量会被初始化为...

    springboot+java类热加载

    本文将深入探讨"springboot+java类热加载"这一主题,包括其核心概念、实现方式以及相关技术。 **热加载(Hot Loading)**是开发过程中的一个重要功能,它允许开发者在不重启应用的情况下更新代码,提高开发效率。在...

    Java之——类热加载

    Java类的加载分为三个阶段:加载、验证、准备、解析和初始化。当类被加载时,类加载器会查找并读取类的字节码文件(.class),将其转换为内部数据结构,并存储在方法区。在类加载过程中,我们可以利用这个机制实现...

    java初始化和清理

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

    Java类加载器.pdf

    它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类加载器的工作原理 Java类加载器遵循按需加载原则,即只有当应用程序真正需要使用某个类时,类加载器才会去加载它。这一...

    java JVM 类加载-初始化 过程

    java JVM 类加载-初始化 过程

Global site tag (gtag.js) - Google Analytics