Java加载顺序以前没有怎么深究,这段时间再看《s深入研究虚拟机》,测试了下加载顺序
代码
/**
* <p>Description:TODO</p>
*
* @author esdong
* 2015-10-14
*/
public class TestLoad {
public static TestLoad test = new TestLoad();
public static int a = 1;
public static int b = 2;
public int c = 1;
private TestLoad(){
a ++;
b ++;
c ++;
}
public static TestLoad getInstence (){
return test;
}
public static void main(String[] args) {
TestLoad test1 = TestLoad.getInstence();
System.out.println(test1.a);
System.out.println(test1.b);
System.out.println(test1.c);
}
}
运行结果了下测试结果,与以前理解的确实一样
结果:
初始化----
1
2
2
并不是想象的2,3,2
这个确实和虚拟机加载的方式有区别,顺序应该是
1、初始化时,TestLoad test =null, int a, int b,都会被放入java栈中,此时a 和 b均为初始值0;而类信息,静态方法。方法修饰等后悔被放入方法区
2、执行 new TestLoad() 初始化方法,此时a和b均为1,
3、加载静态变量 ,此时a和b重新赋值,,
4、对于实例变量,在调用时才会生成内存空间,不论在什么时候调用。所以c一调用,就会分配内存空间并且赋值,所以第一次就是1;
将代码修改下就能完全看出加载顺序
public class TestLoad {
public static TestLoad test = new TestLoad();
public static int a = 1;
public static int b = 2;
public int c = 1;
{
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
static{
System.out.println("静态方法----");
}
private TestLoad(){
System.out.println("初始化----");
a ++;
b ++;
c ++;
}
private void test(){
System.out.println("初始化test----");
}
public static TestLoad getInstence (){
System.out.println("实例调用---");
return test;
}
public static void main(String[] args) {
TestLoad test1 = TestLoad.getInstence();
test1.test();
System.out.println(test1.a);
System.out.println(test1.b);
System.out.println(test1.c);
}
}
输出结果为:
0
0
1
初始化----
静态方法----
实例调用---
初始化test----
1
2
2
分享到:
相关推荐
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础...
Java基础学习课件PPT是一套全面覆盖Java SE(标准版)基础知识的教育资源,适合初学者和希望巩固Java技能的开发者。这套课件旨在在一个月内帮助学习者掌握Java编程的核心概念,为深入学习和应用Java技术打下坚实的...
Java基础学习资料是一套全面的教程,旨在帮助初学者掌握Java编程的核心概念和技术。这个教程涵盖了从环境配置到高级主题的广泛内容,确保学习者能够扎实地建立起Java编程的基石。 首先,"开发环境搭建,基本语法,...
java基础学习笔记、各种文档、示例代码等
JAVA学习教程
【JAVA零基础学习】 在IT领域,Java编程语言以其跨平台、面向对象的特性而备受推崇,成为初学者和专业人士的首选。对于那些没有编程基础的人来说,"JAVA零基础学习"是一个理想的起点,通过系统的学习,你可以从零...
Java基础学习笔记
java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容
"Java 基础学习" Java 基础学习是指学习 Java 编程语言的基础知识和概念。Java 是一种广泛使用的高级编程语言,基于 Java 虚拟机(Java Virtual Machine)和 Java 应用编程接口(Application Programming Interface...
java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料...
1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识是理解和编写任何Java程序的基石。 2. **面向对象编程**:深入讲解Java...
这套课程既可以作为从零基础开始学习的JAVA基础到高级学习教程,对于有JAVA基础的同学来说可以略过前面的JAVA基础章节,直接学习后续的JAVA高级部分课程。更可以灵活的作为章节技术,进行针对性的JAVA学习。还是要...
本人从java0基础到javaweb再到web框架学习的所有笔记,详细记录了个人学习所有的知识点 包含java核心基础 jsp servlet 等javaweb技术 包含了ssh,ssm框架所有的知识点和整合等很详细希望能帮助到正在努力学习的你
很经典的java基础学习视频,其中包括java的面向对象,多线程,数组等! 本人刚开始学习看了好几篇。 马老师讲的很好!
Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...
Java学习流程Java基础语法学习 Java学习流程可以总结为四步走:构建Java开发环境、学习Java基础语法、学习面向对象编程和应用编程。 Step 1: 构建Java开发环境 要学习Java,首先需要构建Java开发环境。包括下载...
java基础异常学习ppt 学完本次课程后,你能够 了解异常概念 理解Java异常处理机制 会捕捉异常 会抛出异常 了解Java异常体系结构