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

JVM 之对象构造机制

阅读更多

 

 

一直想写点东西,但是不知道从哪里下手,想来想去,我们搞Java的,还是从jvm,从Java基础上说起吧。言归正传,先上代码,后分析!

 

 

public class Person {

static{

System.out.println("Person 静态块");

}

public Person(){

System.out.println("Person 构造函数");

}

}

 

 

public class Teacher {

 

public Teacher(){

System.out.println("Teacher 构造函数");

}

public Teacher(String name){

System.out.println("Teacher 构造函数+++" + name);

}

}


 


public class Student extends Person {
private Teacher t1 = new Teacher();
private static Teacher t2 = new Teacher("李四");
static {
System.out.println("Student 静态块1");
}

{
System.out.println("Student 非静态块1");
}
{
System.out.println("Student 非静态块2");
}

static {
System.out.println("Student 静态块2");
}

public Student() {
System.out.println("Student 构造函数");
}

public static void test() {
System.out.println("Studeng 静态方法");
}
}


public class Test {
public Test() {
System.out.println("Test 构造函数");
}

static {
System.out.println("Test 静态块");
}

{
System.out.println("Test 非静态块");
}

public static void main(String[] args) {
Test t = new Test();
t.startTest();
}

public void startTest() {
System.out.println("------------1-------------");
Student.test();
System.out.println("------------2-------------");
Student s = new Student();
System.out.println("------------3-------------");
}
}

 

 

运行结果:大家可以先试一遍再运行

 

 

Test 静态块

Test 非静态块

Test 构造函数

------------1-------------

Person 静态块

Teacher 构造函数+++李四

Student 静态块1

Student 静态块2

Studeng 静态方法

------------2-------------

Person 构造函数

Teacher 构造函数

Student 非静态块1

Student 非静态块2

Student 构造函数

------------3-------------

 

 

 

那么,现在解析一下。从运行结果1,我们得到类加载顺序:

静态块>非静态块>构造函数

从运行结果2,我们得到类加载顺序:

静态块(包括 static区和静态变量)>非静态块(包括 初始化区和实例变量)>构造函数。当有多个static区或者静态变量时,按代码的先后顺序进行加载,且只加载一次;非静态块与静态块加载顺序规则相同;

构造函数,只有当实例化类时(new),才会加载

从运行结果3和运行结果2得到的类加载顺序是:

在2的结果下,父类加载顺序>子类加载顺序

 

程序运行过程是:

1、在Test类中,首先加载static区、初始化区、构造函数,执行main方法

2、到达Student.test(),开始加载Student类,发现Student类有父类Person,先不加载Student,开始加载Person类,加载Person类的static区;返回加载Student,开始加载静态区(包括静态变量和static区),按代码的先后顺序,进行加载;执行静态方法test()

3、Student s = new Student(),实例化Student,因为Student类有父类Person,所以先加载Person的构造函数(静态块只加载一次,在过程2中都加载过了);返回加载Student,(静态块加载过了)加载非静态块,按代码的先后顺序,进行加载;加载Student构造函数

4、mian方法执行完毕

 

 

1
0
分享到:
评论
3 楼 tovep 2012-02-13  
mfkvfn 写道
。。。
这哪里是类加载机制。只是对象构造机制而已。

静态static的构造机制...
2 楼 mengyunshuitian 2012-02-09  
。。。
这哪里是类加载机制。只是对象构造机制而已。

没有区分开类加载机制和对象构造机制,谢谢指点
mfkvfn 写道
。。。
1 楼 mfkvfn 2012-02-09  
。。。
这哪里是类加载机制。只是对象构造机制而已。
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JVM实战-JVM类加载机制案例分析

    ### JVM实战-JVM类加载机制案例分析 #### 实验背景与目标 本次实验的主要目的是深入理解Java虚拟机(JVM)中的类加载机制。通过实践操作,掌握类的加载、连接与初始化过程,了解不同类型的类加载器及其工作原理,...

    JVM工作原理及内存管理机制

    在执行方法时JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四种指令来执行 ...(4)invokespecial:JVM对于初始化对象(Java构造器的方法为:)以及调用对象实例中的私有方法时。

    java性能调优-jvm创建对象和-performance-createobj-allocationmemory.zip

    总结,Java性能调优中,理解JVM对象创建和内存分配机制是关键。通过合理的设计、优化策略以及JVM参数配置,可以显著提升应用的运行效率和内存管理效果。在实际工作中,应结合监控工具(如VisualVM、JProfiler等)...

    JVM调优实战(转)

    垃圾回收是JVM中的一种机制,用于回收无用的对象以释放内存空间。垃圾回收机制可以分为两种:部分垃圾回收和完全垃圾回收。部分垃圾回收是指JVM在年轻代中回收无用的对象,而完全垃圾回收是指JVM在整个堆中回收无用...

    JVM构造思维导图

    理解JVM的构造对于优化代码性能、排查问题以及深入理解Java编程至关重要。以下是对"JVM构造思维导图"的详细解读。 1. **JVM结构** JVM主要由以下几个部分构成: - **类加载器子系统(ClassLoader Subsystem)**:...

    002 RJPOS:完成jvm对象的设计

    【标题】"002 RJPOS:完成JVM对象的设计" 在Java开发中,理解JVM(Java虚拟机)的工作原理对于优化程序性能、解决内存问题以及深入掌握Java编程至关重要。RJPOS项目中的"完成JVM对象的设计"这一主题,主要探讨了如何...

    JVM虚拟机复习宝典

    3. **对象构造**:在分配好内存之后,JVM将执行构造方法,以初始化对象的状态。构造过程包括对对象头和实例数据的初始化。 4. **设置对象头**:对象创建完成后,JVM需要为对象设置必要的标志位,如哈希码、GC年龄等...

    JVM的机制学习手册非常不错

    5. 垃圾回收:JVM自动管理内存,通过垃圾回收器回收不再使用的对象。 三、JVM编译过程 1. 分析和输入到符号表(Parse And Enter): - 词法分析:将源代码分解成一个个有意义的符号(tokens)。 - 语法分析:构建...

    深入理解JVM

    Java虚拟机(JVM)是一种用于执行Java字节码的虚拟机,它是Java平台的核心组件之一。JVM使得Java程序可以在多种操作系统上运行而无需重新编译。这种跨平台性主要得益于Java字节码的独立性,它不是针对任何特定硬件或...

    9.java学习第九章——对象的创建和使用+构造方法+方法重载——作业的形式:创建对象在JVM中的存储状态(内存图).pdf

    - 显式构造方法:可以通过定义一个或多个构造方法来自定义对象的初始化方式。 ```java public class Student { private int id; // 无参构造方法 public Student() { this.id = 0; // 初始化id } // 带...

    Java JVM Instruction Set

    JVM通过执行时验证机制确保字节码的安全性,防止恶意代码的执行。 #### 另一个示例 假设我们有一个简单的Java程序,包含两个类`Main`和`Helper`。`Main`类中有一个`main`方法,该方法调用了`Helper`类的一个静态...

    面试必问之jvm与性能优化.pdf

    ### 面试必问之JVM与性能优化——关键知识点解析 #### 一、JVM加载Class文件的原理机制 在Java开发过程中,深入理解JVM如何加载Class文件至关重要,尤其是在面试时,这一知识点往往是考察的重点之一。下面将详细...

    JVM.rar_jvm

    5. 内存管理(Memory Management):包括垃圾收集机制,自动回收不再使用的对象,避免内存泄露。常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集等。 6. 安全管理器(Security Manager):确保Java程序...

    JVM调优篇.pdf

    实际上变量v在准备阶段过后的初始值为0而不是8080,将v赋值为8080的putstatic指令是程序被编译后,存放于类构造器方法之中。但是注意如果声明为:public static final int v = 8080;在编译阶段会为v生成Constant...

    JVM技术培训讲座

    #### 一、JVM的内部构造 JVM(Java虚拟机)是Java程序运行的基础环境,它为Java程序提供了一个独立于硬件平台的抽象计算机模型。JVM的设计使得Java程序可以跨平台运行,即编写一次代码可以在多个平台上运行。 - **...

    深入浅出jvm虚拟机视频大全(jvm性能调优+内存模型+虚拟机原理)

    JVM的核心组件之一就是字节码解释器,它负责执行字节码指令。此外,JVM还包含一个即时编译器(JIT Compiler),能够将热点代码编译成本地机器码,提高执行效率。 #### 3. 内存分配与回收策略 - **内存分配**:对象...

    JVM演讲PPT分享

    垃圾回收是JVM的自动内存管理机制,它负责回收JVM堆中不再使用的对象所占用的内存空间。主要的GC算法包括标记-清除(Mark-Sweep)、复制(Copying)、标记-整理(Mark-Compact)和分代收集(Generational Collection...

    JVM内存结构.pdf

    Java虚拟机(JVM)作为Java程序的运行环境,其核心组件之一便是内存管理系统。理解JVM的内存布局对于开发高性能的应用程序至关重要。本文将详细介绍JVM内存结构及其各个组成部分的功能,并探讨如何通过优化这些组件来...

    JVM指令码表.zip

    6. **方法调用与返回指令**:`invokevirtual`用于调用对象的虚方法,`invokespecial`用于构造函数调用和私有方法,`return`表示方法的结束。 7. **异常处理指令**:如`athrow`抛出异常,`catch`配合`try-catch`块...

Global site tag (gtag.js) - Google Analytics