`

对象的初始化全过程

阅读更多
/*
 *初始化全过程:
 *
 *1,	第一次创建MyClass类的对象,或者第一次访问MyClass的static方法或字段时,Java解释器会搜寻classpath,找到MyClass.class。
 *2,	装载MyClass.class后,会对所有的static数据进行初始化。这样第一个装载Class对象的时候,会先进行static成员的初始化。
 *3,	使用new MyClass()创建新对象的时候,MyClass对象的构建进程会先在堆里为对象分配足够的内存。 *
 *4,	清零这块新内存,把MyClass对象的primitive类型的成员赋上缺省值。
 *5,	执行定义成员数据时所作的初始化。 
 *6,	执行构造函数。
 */
import static net.mindview.util.Print.*;

public class Beetle extends Insect
{
	private int k = printInit("Beetle.k initialized");

	public Beetle()
	{
		print("k = " + k);
		print("j = " + j);
	}
	private static int x2 = printInit("static Beetle.x2 initialized");

	public static void main(String[] args)
	{
		print("Beetle constructor");
		Beetle b = new Beetle();
	}
}

class Insect
{
	private int i = 9;
	protected int j;

	Insect()
	{
		print("i = " + i + ", j = " + j);
		j = 39;
	}

	private static int x1 = printInit("static Insect.x1 initialized");

	static int printInit(String s)
	{
		print(s);
		return 47;
	}
}


/* Output:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 47
j = 39
*///:~

/****************************************************/

// 变量初始化先后顺序的示例
import static net.mindview.util.Print.*;

//当创建Window的实例对象时会有消息提示
class Window
{
	Window(int marker)
	{
		print("Window(" + marker + ")");
	}
}

class House
{
	Window w1 = new Window(1); // 构造函数前的变量

	House()
	{
		//构造函数里面的变量
		print("House()");
		w3 = new Window(33); // 重新赋值w3
	}

	Window w2 = new Window(2); // 构造函数后的变量

	void f()
	{
		print("f()");
	}

	Window w3 = new Window(3); // 结束类体时的对象
}

public class OrderOfInitialization
{
	public static void main(String[] args)
	{
		House h = new House();
		h.f(); 
	}
} 
/*
* 输出结果: Window(1) Window(2) Window(3) House() Window(33) f()
*
* 从结果看出,虽然域变量w2,w3排在构造函数后面,但它的输出却在构造函数前面
*/

/****************************************************/

// 数组的初始化
import java.util.*;

public class ArrayInit
{
	public static void main(String[] args)
	{
		//直接赋值方式,局限在于数组在大小编译确定
		Integer[] a = { 
				new Integer(1), 
				new Integer(2), 
				3, // 自动包装
				};
		//new方式,适于参数数量未知的场合,或者参数类型未知的场合
		Integer[] b = new Integer[] { 
				new Integer(1), 
				new Integer(2), 
				3, // 自动包装
				};
		System.out.println(Arrays.toString(a));
		System.out.println(Arrays.toString(b));
	}
}
/* 输出结果:
 [1, 2, 3]
 [1, 2, 3]
 *///:~
1
2
分享到:
评论

相关推荐

    解析Java类和对象的初始化过程

    本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式...

    Java面向对象(进阶)- super关键字的使用与子类对象实例化全过程

    在Java编程语言中,面向对象编程是核心特性之一。...同时,子类对象实例化的过程是先执行父类构造器,再执行子类构造器,保证了对象初始化的顺序。理解和掌握这些概念对于编写高效的Java代码至关重要。

    Java起航 ---- 类的初始化历程

    在Java编程语言中,类的...总结来说,Java类的初始化是编程实践中不可忽视的一部分,它涉及了从类加载到执行的全过程。通过深入学习JVM的工作原理,我们可以更好地理解和优化Java程序的运行效率,从而提升软件质量。

    关于C++11的统一初始化语法示例详解

    `则能明确表示这是一个对象初始化,而不是函数声明。 在容器类的使用中,列表初始化也有其独特作用。例如,`vector<int> v1{99};`将创建一个包含一个元素(值为99)的向量,而`vector<int> v2(99);`会创建一个包含...

    行业资料-电子功用-全自动高速电子标签监测初始化设备的说明分析.rar

    《全自动高速电子标签监测初始化设备》 在现代信息化社会中,电子标签(RFID)技术已经广泛应用在各行各业,包括物流管理、库存控制、商品追溯等领域。全自动高速电子标签监测初始化设备是实现这些应用的关键硬件...

    数据库设计全过程--数据库设计全过程

    ### 数据库设计全过程详解 #### 一、引言 随着信息技术的发展,数据库设计成为现代信息系统构建的核心环节之一。良好的数据库设计不仅能够确保数据的有效管理和利用,还能提高系统的整体性能和可扩展性。本文将...

    Java对象(最后面是序列化的知识)1

    另外,除了`Serializable`接口,还可以实现`Externalizable`接口来自定义序列化和反序列化的全过程,但这样要求类必须有一个无参构造函数。 在反序列化过程中,有时需要验证对象的完整性,这可以通过`...

    ssm项目 初始化资源 ,父子依赖项目

    在Java Web开发中,Spring作为一个全功能的容器,负责管理应用中的对象(bean),提供事务控制、AOP(面向切面编程)等功能。Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应,它提供了模型-视图-控制器...

    反演软件,开发环境c++,有地震反演程序和子波反演,可创建地震模型,显示初始化模型。

    综上所述,这款基于C++开发的地球物理反演软件提供了全面的解决方案,涵盖了从数据处理到结果可视化的全过程。它不仅包含了地震反演和子波反演的核心算法,还支持用户自定义地震模型,以及实时查看和评估模型的初始...

    C++程序设计基础教程 苏大C++程序设计教程(第二版) 第9章 对象生灭(共28页).pptx

    如果对象未经初始化,全局对象将被默认初始化为全0位,而局部对象则可能含有随机值,这可能导致不可预知的程序行为。为了保证封装性,C++中的类通常会隐藏其数据成员,因此构造函数在创建对象时不仅需要设置初始值,...

    浅析Java语言中对象的创建过程.zip

    本篇文章将深入探讨Java中对象创建的全过程,帮助开发者理解这一核心概念。 首先,我们需要了解的是Java中的类。类是对象的蓝图,它定义了对象的属性(字段)和行为(方法)。在Java源代码中,我们通过`class`...

    PHP的性能测试全过程分享.doc

    在探讨PHP性能测试的全过程中,我们首先需要澄清一个普遍的误解:PHP是否真的性能低下。这篇文章正是为了挑战这一观点,通过深入分析PHP的源码、应用场景、基准性能以及与其他语言的对比,来揭示PHP的真实性能表现。...

    C语言编译全过程介绍

    - **初始化和清理**:处理C++的构造函数和析构函数调用,以及静态对象的初始化。 通过以上步骤,一个C语言源代码最终转变为可在特定硬件上运行的可执行程序。了解这一过程可以帮助开发者更好地调试问题,优化代码...

    完整版Java全套入门培训课件 Java基础 03-面向对象(共18页).pptx

    构造函数在Java中用于初始化新创建的对象,它的名称必须与类名相同,且没有返回类型。构造函数可以有多个,通过方法重载来适应不同初始化需求。默认构造函数是系统自动提供的,而自定义构造函数则可以满足特定的初始...

    ANE 打包全过程描述

    ### ANE 打包全过程描述 #### Adobe AIR 的本机扩展(ANE)打包流程详解 **Adobe AIR**(Adobe Integrated Runtime)是一种强大的跨操作系统运行环境,允许开发者利用**Flash**、**Flex**、HTML以及JavaScript等技术...

    java new一个对象的过程实例解析

    Java新建对象的过程是一个复杂的过程,涉及到类加载、链接、初始化和对象创建等多个阶段。在这篇文章中,我们将详细介绍Java新建对象的过程,并通过示例代码对每个阶段进行了详细的解释。 类加载过程 Java 使用...

    C与C++程序编译链接全过程解析.rar

    此外,对于数组和动态分配的对象,编译器还需要处理对应的初始化和清理工作。 在实际开发中,我们通常使用集成开发环境(IDE)或编译器工具链(如GCC或Clang)来自动化这些过程。这些工具可以一次执行所有步骤,...

    php面向对象全攻略 (二) 实例化对象 使用对象成员

    通过new关键字调用类的构造函数来初始化对象。 例如,在给定的代码中,类Person被定义,并且使用new关键字创建了三个Person类的实例: ```php class Person { var $name; var $sex; var $age; function say() ...

    java类加载过程详解.doc

    Java 类加载过程是Java虚拟机(JVM)在运行时动态加载类的机制,它涉及类的生命周期中的几个关键步骤,包括装载、连接、初始化和卸载。下面将详细阐述这些过程。 1. 装载 装载阶段是类加载的起始点,主要分为三个...

    c++手册 对象的演化

    总结,《C++手册:对象的演化》涵盖了C++对象从诞生到消亡的全过程,包括构造、拷贝、移动、销毁,以及在继承、多态、并发环境下的行为。理解并熟练运用这些概念和技术,能帮助开发者编写出高效、健壮的C++程序。

Global site tag (gtag.js) - Google Analytics