`

Java基础学习1

阅读更多
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基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了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基础学习Java基础...

    java基础学习课件ppt

    Java基础学习课件PPT是一套全面覆盖Java SE(标准版)基础知识的教育资源,适合初学者和希望巩固Java技能的开发者。这套课件旨在在一个月内帮助学习者掌握Java编程的核心概念,为深入学习和应用Java技术打下坚实的...

    Java基础学习资料

    Java基础学习资料是一套全面的教程,旨在帮助初学者掌握Java编程的核心概念和技术。这个教程涵盖了从环境配置到高级主题的广泛内容,确保学习者能够扎实地建立起Java编程的基石。 首先,"开发环境搭建,基本语法,...

    java基础学习包

    java基础学习笔记、各种文档、示例代码等

    JAVA0基础学习

    JAVA学习教程

    JAVA零基础学习

    【JAVA零基础学习】 在IT领域,Java编程语言以其跨平台、面向对象的特性而备受推崇,成为初学者和专业人士的首选。对于那些没有编程基础的人来说,"JAVA零基础学习"是一个理想的起点,通过系统的学习,你可以从零...

    Java基础学习笔记.pdf

    Java基础学习笔记

    java基础学习内容

    java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容java基础学习内容

    java基础学习java基础学习.doc

    "Java 基础学习" Java 基础学习是指学习 Java 编程语言的基础知识和概念。Java 是一种广泛使用的高级编程语言,基于 Java 虚拟机(Java Virtual Machine)和 Java 应用编程接口(Application Programming Interface...

    本项目用于从头开始梳理Java知识体系,梳理路线为,Java基础—Java高级—Java并发—常用框架—常用中间件—.zip

    java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料...

    java学习笔记markdown

    1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识是理解和编写任何Java程序的基石。 2. **面向对象编程**:深入讲解Java...

    JAVA零基础到高级进阶特训营 JAVA多线程并发设计+Spring高级+数据库开发+JAVA基础等

    这套课程既可以作为从零基础开始学习的JAVA基础到高级学习教程,对于有JAVA基础的同学来说可以略过前面的JAVA基础章节,直接学习后续的JAVA高级部分课程。更可以灵活的作为章节技术,进行针对性的JAVA学习。还是要...

    java个人学习从java核心基础到javaweb再到框架所有学习笔记比较详细

    本人从java0基础到javaweb再到web框架学习的所有笔记,详细记录了个人学习所有的知识点 包含java核心基础 jsp servlet 等javaweb技术 包含了ssh,ssm框架所有的知识点和整合等很详细希望能帮助到正在努力学习的你

    java基础学习视频(马士兵)

    很经典的java基础学习视频,其中包括java的面向对象,多线程,数组等! 本人刚开始学习看了好几篇。 马老师讲的很好!

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例.zip

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...

    java学习流程java基础语法学习

    Java学习流程Java基础语法学习 Java学习流程可以总结为四步走:构建Java开发环境、学习Java基础语法、学习面向对象编程和应用编程。 Step 1: 构建Java开发环境 要学习Java,首先需要构建Java开发环境。包括下载...

    java基础:异常学习ppt(学习模板)

    java基础异常学习ppt 学完本次课程后,你能够 了解异常概念 理解Java异常处理机制 会捕捉异常 会抛出异常 了解Java异常体系结构

Global site tag (gtag.js) - Google Analytics