`
guimingyue
  • 浏览: 74948 次
  • 性别: 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虚拟机JVM类加载初始化

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

    java类加载与初始化

    NULL 博文链接:https://jeckfan.iteye.com/blog/1108756

    java初始化和清理

    Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,程序是作为启动过程的一部分立刻被加载,而Java 的 类加载只在需要使用程序代码时才会被加载(每个...

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

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

    java类加载机制.xmind

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

    Java深度历险(二)——Java类的加载、链接和初始化

    Java深度历险(二)——Java类的加载、链接和初始化

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

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

    深入java虚拟机加载初始化

    深入研究java加载初始化............

    Java类加载机制与反射-PPT

    Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射

    深入理解java类加载机制

    在类加载方面,我们将深入探讨Java程序的类加载原理和流程,包括加载、验证、准备、解析和初始化等五个环节的详细解析,并对其强调点进行详细讲解。我们将详细介绍Java虚拟机中类的生命周期并探讨类加载时的各种问题...

    java stream 初始化及懒调用源代码

    java stream的初始化及懒加载源代码, 文章《java 中Stream初始化及懒调用(Lazy Invocation)》 地址:https://blog.csdn.net/2301_77345366/article/details/130017616

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

    一、Java的类加载机制回顾与总结:  我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的是把Java字节代码转换成JVM中的java.lang.Class类的对象。这样Java可以对该对象进行一系列操作,...

    Java类加载初始化的过程及顺序

    今天小编就为大家分享一篇关于Java类加载初始化的过程及顺序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    java 动态加载类

    java 初始化类 执行类的方法 可以初始化一个class,执行他的有参数或者无参数的方法

    Java类加载连接和初始化原理解析

    主要介绍了Java类加载连接和初始化原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    类加载与类初始化

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

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。...3、类初始化时,先初始化类的属性成员,在执行构造方法。

    详解JAVA类加载机制(推荐)

    过程共有七个阶段,其中到初始化之前的都是属于类加载的部分 加载—-验证—-准备—-解析—–初始化—-使用—–卸载 系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类,当运行某个java程序时...

    深入理解Java虚拟机-虚拟机类加载机制.xmind

    虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验、转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这就是虚拟机加载机制。

    java虚拟机、进程周期,类加载1器和类使用要点简述

    类加载器 (类加载器使用双亲委派模型,为的是避免类的重复加载) 1、Java虚拟机与进程的生命周期 2、类的加载、连接与初始化 3、Java程序对类的使用可以分为两种:

Global site tag (gtag.js) - Google Analytics