如果不懂java中初始化过程,那么就不能称你懂java。今天我总结了一下java中的初始化过程。并通过一个例子加深理解。
当你运行一个java程序时,
1 首先计算机去找类的路径classpath(该路径是你设置的环境变量)
2 通过路径找到.class文件。
3 在JVM中进行类的加载,发现有父类 进行4
4 在classpath中找到父类的.class文件
5 对父类中静态资源进行初始化
6 对子类的静态资源初始化
7 如果主函数中有对象的产生 那么进行 8,9,10,11
8 父类成员属性的初始化
9 父类构造方法的初始化
10 子类成员属性的初始化
11 子类构造方法的初始化
下面一段代码可以加深理解
class Shape { private static int i; protected static int j=10; Shape () { System.out.println ("i = " + i + ", j = " + j); j = 5; } private static int x1 = printInit("private Shape.x1 initialized"); //1 static int printInit(String s) { System.out.println (s); return ++i; } } public class Circle extends Shape { int k = printInit("Circle.k initialized"); public Circle () { System.out.println ("k = " + k); System.out.println ("j = " + j); System.out.println ("x2 = " + x2); super.printInit("super"); } public static int x2 = printInit("public Circle.x2 initialized"); public static void main(String[] args) { System.out.println ("Circle constructor"); Circle b = new Circle (); System.out.println ("b.k="+b.k); } }
下面开始讨论这个例子
1 首先计算机去找类的路径classpath(该路径是你设置的环境变量)
2 通过路径找到Circle.class文件。
3 在JVM中进行类的加载,发现有父类 Shape进行4
4 在classpath中找到父类的 Shape.class文件
5 对父类中静态资源进行初始化 初始化结果:private static int i;初始化的时候如果没有赋值,基本类型都会被初始化为0,对象引用被初始化为null。这一句得到i=0;protected static int j=10;得到j=10;
private static int x1 = printInit("private Shape.x1 initialized"); //1
static int printInit(String s) {
System.out.println (s);
return ++i;
} 那么改程序的第一句将输出private Shape.x1 initialized;并且i=1;
6 对子类的静态资源初始化
public static int x2 = printInit("public Circle.x2 initialized");
那么将输出第二句public Circle.x2 initialized 并且i=2; x2=2
由public static void main(String[] args) {
System.out.println ("Circle constructor");
Circle b = new Circle ();
System.out.println ("b.k="+b.k);
} 将输出第三句:Circle constructor 。
7 主函数中有对象的产生 那么进行 8,9,10,11
8 父类成员属性的初始化 父类中没有成员属性
9 父类构造方法的初始化
Shape () {
System.out.println ("i = " + i + ", j = " + j);
j = 5;
}将输出i=2,j=10 然后j=5
10 子类成员属性的初始化
int k = printInit("Circle.k initialized");将输出:Circle.k initializd 然后i=3 k=3
11 子类构造方法的初始化
public Circle () {
System.out.println ("k = " + k);
System.out.println ("j = " + j);
System.out.println ("x2 = " + x2);
super.printInit("super");
} 将输出k=3 j=5 x2=2 super 并且i=4
System.out.println ("b.k="+b.k);
将输出结果 b.k=3
那么最终输出结果为
private Shape.x1 initialized public Circle.x2 initialized Circle constructor i = 2, j = 10 Circle.k initialized k = 3 j = 5 x2 = 2 super b.k=3
相关推荐
本主题将深入探讨如何利用子类化技术来拓展EDIT文本编辑框控件,以此来实现自定义的功能和效果。 一、什么是子类化 子类化是指将一个窗口类(Window Class)替换为另一个窗口类的过程。在Windows API中,这通常通过...
### Java程序实现中文转拼音及首字母转换 #### 概述 ...通过对类的设计、初始化过程以及实现细节的深入分析,我们不仅可以了解到这一转换的基本原理,还能在此基础上进行更多的功能拓展和技术优化。
- **错误处理与日志记录**:在权限验证和菜单初始化过程中,应添加异常处理逻辑,对于权限获取失败或菜单加载异常的情况,记录详细的错误信息,便于后续排查和维护。 总之,“根据用户初始化菜单权限”不仅是实现...
在Java中,继承是一种重要的面向对象编程特性,它允许创建一个新类(称为子类或派生类)继承现有类(称为基类或父类)的所有属性和方法。继承提高了代码的复用性和模块性,简化了开发过程。 #### 二、示例分析与...
在这个文档中,我们主要关注如何处理序列化多表操作,理解请求与响应的流程,以及如何使用视图组件(包括子类与拓展类)以及重写`GenericAPIView`类的接口。 首先,让我们深入探讨序列化多表操作。在Django中,我们...
在Java中,程序是由类构成的,每个类都是创建对象的模板。一个类可以包含零个或多个方法,这些方法描述了对象能够执行的操作。通过类的实例化,我们可以创建具体的对象。在面向对象编程中,对象间的交互可以通过继承...
襄阳特产网的初始化设计源码项目的开发,利用了Java技术作为其核心开发语言,目的是为广大用户提供一个集展示与交易于一体的在线平台。该项目的前端开发使用了JavaScript和CSS,这些技术的结合为用户带来了更加动态...
* Initializing:执行类的初始化方法,如静态变量赋值和静态块执行。 三、类加载器的特点 * 可见性限制:下层的加载器能够看到上层加载器中的类,反之则不行,也就是说委托只能从下到上。 * 不允许卸载类:类加载...
《Think in Java 中文文档》作为一本深入讲解Java编程语言的教材,不仅适合有志于深入学习Java的程序员,也适合那些希望拓展自己技术栈的初学者。本书通过系统性的结构和丰富的实例,帮助读者全面理解Java,并最终...
线程并发处理也是Java中的一项挑战。你可能会遇到涉及同步和异步、线程安全、锁机制、并发工具类如Semaphore、CountDownLatch等的问题。理解并熟练运用这些工具,能够让你编写出高效且稳定的多线程程序。 还有,...
Matrix类应包含二维数组来存储元素,提供初始化、加法、减法、乘法等操作的方法。此外,还可能包括转置、求行列式、求逆矩阵等功能,这些都是在理解算法和数据结构时的重要实践。 通过这些实验,学生可以学习到Java...
实例化时,类的实例化顺序首先是父类静态成员和静态初始化块,然后是子类静态成员和静态初始化块,接着是父类实例变量和实例初始化块,然后是父类的构造函数,最后是子类实例变量和实例初始化块,以及子类的构造函数...
如果开启,则在启动时会预先加载一部分类,以加快应用程序的初始化速度。 通过仔细调整这些编译选项,开发者可以确保KVM在ARM平台上的高效稳定运行,同时还能根据特定的应用场景进一步优化性能。 #### 结论 随着...
在Java中,反序列化是将已保存或传输的序列化对象状态转换回对象的过程,这对于跨平台交互或持久化存储非常有用。 在"phprpc.jar 包java 反序列化PHP工程demo"中,我们主要会学习以下几个关键知识点: 1. **PHP...
5. Initialization:执行类中的静态初始化代码。 JVM的工作过程可以分为以下几个步骤: 1.类加载:将Java字节码文件加载到JVM内存中。 2.执行引擎:解释或编译类文件,转化成特定CPU的机器码。 3.运行时数据区域:...
- 可以尝试其他的初始化方法或距离度量,比如质心初始化或马氏距离。 5. **应用拓展**: - 将此分类算法应用于其他领域,如文本分类、客户细分等。 - 结合深度学习方法,如自编码器,提升聚类效果。 总的来说,...
特别是对于初始化过程中可能出现的死循环问题,提供了解决方案:多次尝试初始化,如果失败则输出错误信息,并通过串口和蓝牙模块发送信息。 7. **代码逻辑**:初始化函数通常有返回值,这里通过for循环最多进行3次...
Java中的关键字`extends`用于实现继承,子类可以覆盖或扩展父类的方法,实现功能的拓展。 3. **多态**:多态性是面向对象的另一个关键特性,它允许不同对象对同一消息做出不同的响应。Java中,多态主要通过接口...