对Java JVM中类加载几点解释

1.用到类的时候,类加载到方法区,同时方法区会存放static的内容(包括静态方法和静态变量),随类的加载而加载

2当new的时候,会在堆中创建一个对象,在其中会开辟其中的实例变量内存并初始化,堆中变量默认会被初始化0 null

3当方法运行时,进行压栈push操作,不同方法产生一个栈帧,先进后出原则,局部变量是存放在栈中,方法用完后,弹栈pop

以下代码是类在实例时候的一些执行顺序

//class
class Constructors01{
	String name = "bookThree";//实例变量初始化 要优先于构造代码块
	static String jk = "klhd";//静态变量初始化 优先于对象创建
	{
		System.out.println("3My NAME is " +name);//构造代码块,是初始化所有对象的,优先于对象创建(构造函数)
	}
	static {
		System.out.println("1Follow Class  " + jk);//静态代码块,用于初始类的,随类加载而加载
	}
	Constructors01(){
		name = "hah";
		System.out.println("4My name change to "+ name);
	}
}
class Constructors01Child extends Constructors01{
	static{
		System.out.println("2i am a child static");
	}
	{
		System.out.println("5i  am a child object");
	}
	Constructors01Child(){
		System.out.println("6Me too child object");
	}
}

  new一个子类对象时,以上代码顺序可归纳为:

父静态变量
父静态代码块
子静态代码块
父实例变量
父构造代码块
父构造函数
子构造代码块
子构造函数

  

时间: 2024-12-28 05:40:41

对Java JVM中类加载几点解释的相关文章

JVM中各内存区域解释,以及变量的作用域解释

转载自:http://blog.csdn.net/zz87250976/article/details/42875301 JVM内存分四种:1.栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源:2.堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收:3.静态区(datasegment)—存放全局变量,静态变量和字符串常

java jvm虚拟机类加载器

在Java中任意一个类都是由这个类本身和加载这个类的类加载器来确定这个类在JVM中的唯一性. 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现, 以便让应用程序自己决定如何去获取所需要的类. 实现这个动作的代码模块称为“类加载器”. 类与类加载器 类加载器虽然只用于实现类的加载动作, 但它在Java程序中起到的作用却远远不限于类加载阶段. 对于任意一个类, 都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟

java -- JVM的符号引用和直接引用

在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可.例如,在Class文件中它以CONSTANT_Class_info.CONSTANT_Fieldref_info.CONSTANT_Methodref_info等类型的常量出现.符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中

Java中的ClassLoader详细解释

java中的.java文件经过编译以后,就会生成类文件.class文件.class文件是以二进制字节码存放在硬盘中的.当我们需要使用或加载Java文件到JVM中的时候,会从硬盘中读取字节码的class文件,然后通过类加载器将class文件加载到JVM中.也就是说,所有的Java文件都是通过类加载器加载到JVM中的.当然类加载器也是一个Java文件.那么第一个类加载器又是如何加载到JVM中的呢?在启动JVM的时候,会调运一个本地方法findBootStrapClass方法加载最初始的那个Class

Java核心:类加载和JVM内存的分配

类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(Java虚拟机)当中. 而类加载器主要分为以下几种: 1.Bootstrap class loader (引导类加载器) 负责加载Java核心类库.在jre\lib目录下,包括rt.jar(Java基础类库),这些 都是Java的核心类库.而且这个加载器是由C语言编写的,所以在Java程序中是获取 不

jvm之类加载器-《疯狂java讲义》

1. 类加载器简介 类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个java.lang.Class实例.一旦一个类被载入JVM中,同一个类就不会被再次载入了.现在的问题是怎么样才算“同一个类”?正如一个对象有一个唯一的标识一样,一个载入JVM的类也有一个唯一的标识. 同理,载入JVM的类也有一个唯一的标识,在java中,一个类用其全限定类名(包括包名和类名)作为标识.但在JVM中,一个类用其全限定类名和其类加载器作为其唯一的标识.因此,如果在pg包中,有一个名为Person的类,被类

java中类加载顺序

引子 记得上次中秋一哥们写个需求,没写完.他中秋过后还请一天假,有点错,打电话叫我帮他继续搞. 由于测试支撑,叫到我加班了.第二天过来看,打开页面直接报错,再次点击报错就不一样了.前次报错是有代码行的,第二次直接页面说类发现什么的错. 看了下代码,类似如下: 1 package san; 2 3 import java.io.FileNotFoundException; 4 import java.util.logging.Level; 5 import java.util.logging.Lo

Java虚拟机JVM总结(一)JVM运行原理及JVM中的Stack和Heap的实现过程

Java语言写的源程序通过Java编译器,编译成与平台无关的'字节码程序'(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行,而JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器. 一.JVM原理 1.JVM简介: JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器.它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序. java编译器只要面向JVM,生成JVM能理解

Java开发中的23种设计模式具体解释

public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = factory.produce("sms"); sender.Send(); } } 输出:this is sms sender! 22.多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,假设传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建