/*
*初始化全过程:
*
*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]
*///:~
分享到:
相关推荐
本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式...
在Java编程语言中,面向对象编程是核心特性之一。...同时,子类对象实例化的过程是先执行父类构造器,再执行子类构造器,保证了对象初始化的顺序。理解和掌握这些概念对于编写高效的Java代码至关重要。
在Java编程语言中,类的...总结来说,Java类的初始化是编程实践中不可忽视的一部分,它涉及了从类加载到执行的全过程。通过深入学习JVM的工作原理,我们可以更好地理解和优化Java程序的运行效率,从而提升软件质量。
`则能明确表示这是一个对象初始化,而不是函数声明。 在容器类的使用中,列表初始化也有其独特作用。例如,`vector<int> v1{99};`将创建一个包含一个元素(值为99)的向量,而`vector<int> v2(99);`会创建一个包含...
《全自动高速电子标签监测初始化设备》 在现代信息化社会中,电子标签(RFID)技术已经广泛应用在各行各业,包括物流管理、库存控制、商品追溯等领域。全自动高速电子标签监测初始化设备是实现这些应用的关键硬件...
### 数据库设计全过程详解 #### 一、引言 随着信息技术的发展,数据库设计成为现代信息系统构建的核心环节之一。良好的数据库设计不仅能够确保数据的有效管理和利用,还能提高系统的整体性能和可扩展性。本文将...
另外,除了`Serializable`接口,还可以实现`Externalizable`接口来自定义序列化和反序列化的全过程,但这样要求类必须有一个无参构造函数。 在反序列化过程中,有时需要验证对象的完整性,这可以通过`...
在Java Web开发中,Spring作为一个全功能的容器,负责管理应用中的对象(bean),提供事务控制、AOP(面向切面编程)等功能。Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应,它提供了模型-视图-控制器...
综上所述,这款基于C++开发的地球物理反演软件提供了全面的解决方案,涵盖了从数据处理到结果可视化的全过程。它不仅包含了地震反演和子波反演的核心算法,还支持用户自定义地震模型,以及实时查看和评估模型的初始...
如果对象未经初始化,全局对象将被默认初始化为全0位,而局部对象则可能含有随机值,这可能导致不可预知的程序行为。为了保证封装性,C++中的类通常会隐藏其数据成员,因此构造函数在创建对象时不仅需要设置初始值,...
本篇文章将深入探讨Java中对象创建的全过程,帮助开发者理解这一核心概念。 首先,我们需要了解的是Java中的类。类是对象的蓝图,它定义了对象的属性(字段)和行为(方法)。在Java源代码中,我们通过`class`...
在探讨PHP性能测试的全过程中,我们首先需要澄清一个普遍的误解:PHP是否真的性能低下。这篇文章正是为了挑战这一观点,通过深入分析PHP的源码、应用场景、基准性能以及与其他语言的对比,来揭示PHP的真实性能表现。...
- **初始化和清理**:处理C++的构造函数和析构函数调用,以及静态对象的初始化。 通过以上步骤,一个C语言源代码最终转变为可在特定硬件上运行的可执行程序。了解这一过程可以帮助开发者更好地调试问题,优化代码...
构造函数在Java中用于初始化新创建的对象,它的名称必须与类名相同,且没有返回类型。构造函数可以有多个,通过方法重载来适应不同初始化需求。默认构造函数是系统自动提供的,而自定义构造函数则可以满足特定的初始...
### ANE 打包全过程描述 #### Adobe AIR 的本机扩展(ANE)打包流程详解 **Adobe AIR**(Adobe Integrated Runtime)是一种强大的跨操作系统运行环境,允许开发者利用**Flash**、**Flex**、HTML以及JavaScript等技术...
Java新建对象的过程是一个复杂的过程,涉及到类加载、链接、初始化和对象创建等多个阶段。在这篇文章中,我们将详细介绍Java新建对象的过程,并通过示例代码对每个阶段进行了详细的解释。 类加载过程 Java 使用...
此外,对于数组和动态分配的对象,编译器还需要处理对应的初始化和清理工作。 在实际开发中,我们通常使用集成开发环境(IDE)或编译器工具链(如GCC或Clang)来自动化这些过程。这些工具可以一次执行所有步骤,...
通过new关键字调用类的构造函数来初始化对象。 例如,在给定的代码中,类Person被定义,并且使用new关键字创建了三个Person类的实例: ```php class Person { var $name; var $sex; var $age; function say() ...
Java 类加载过程是Java虚拟机(JVM)在运行时动态加载类的机制,它涉及类的生命周期中的几个关键步骤,包括装载、连接、初始化和卸载。下面将详细阐述这些过程。 1. 装载 装载阶段是类加载的起始点,主要分为三个...
总结,《C++手册:对象的演化》涵盖了C++对象从诞生到消亡的全过程,包括构造、拷贝、移动、销毁,以及在继承、多态、并发环境下的行为。理解并熟练运用这些概念和技术,能帮助开发者编写出高效、健壮的C++程序。