如果不懂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程序实现中文转拼音及首字母转换 #### 概述 ...通过对类的设计、初始化过程以及实现细节的深入分析,我们不仅可以了解到这一转换的基本原理,还能在此基础上进行更多的功能拓展和技术优化。
- **错误处理与日志记录**:在权限验证和菜单初始化过程中,应添加异常处理逻辑,对于权限获取失败或菜单加载异常的情况,记录详细的错误信息,便于后续排查和维护。 总之,“根据用户初始化菜单权限”不仅是实现...
在这个文档中,我们主要关注如何处理序列化多表操作,理解请求与响应的流程,以及如何使用视图组件(包括子类与拓展类)以及重写`GenericAPIView`类的接口。 首先,让我们深入探讨序列化多表操作。在Django中,我们...
在Java中,程序是由类构成的,每个类都是创建对象的模板。一个类可以包含零个或多个方法,这些方法描述了对象能够执行的操作。通过类的实例化,我们可以创建具体的对象。在面向对象编程中,对象间的交互可以通过继承...
* Initializing:执行类的初始化方法,如静态变量赋值和静态块执行。 三、类加载器的特点 * 可见性限制:下层的加载器能够看到上层加载器中的类,反之则不行,也就是说委托只能从下到上。 * 不允许卸载类:类加载...
《Think in Java 中文文档》作为一本深入讲解Java编程语言的教材,不仅适合有志于深入学习Java的程序员,也适合那些希望拓展自己技术栈的初学者。本书通过系统性的结构和丰富的实例,帮助读者全面理解Java,并最终...
线程并发处理也是Java中的一项挑战。你可能会遇到涉及同步和异步、线程安全、锁机制、并发工具类如Semaphore、CountDownLatch等的问题。理解并熟练运用这些工具,能够让你编写出高效且稳定的多线程程序。 还有,...
Matrix类应包含二维数组来存储元素,提供初始化、加法、减法、乘法等操作的方法。此外,还可能包括转置、求行列式、求逆矩阵等功能,这些都是在理解算法和数据结构时的重要实践。 通过这些实验,学生可以学习到Java...
如果开启,则在启动时会预先加载一部分类,以加快应用程序的初始化速度。 通过仔细调整这些编译选项,开发者可以确保KVM在ARM平台上的高效稳定运行,同时还能根据特定的应用场景进一步优化性能。 #### 结论 随着...
在Java中,反序列化是将已保存或传输的序列化对象状态转换回对象的过程,这对于跨平台交互或持久化存储非常有用。 在"phprpc.jar 包java 反序列化PHP工程demo"中,我们主要会学习以下几个关键知识点: 1. **PHP...
- 可以尝试其他的初始化方法或距离度量,比如质心初始化或马氏距离。 5. **应用拓展**: - 将此分类算法应用于其他领域,如文本分类、客户细分等。 - 结合深度学习方法,如自编码器,提升聚类效果。 总的来说,...
Java中的关键字`extends`用于实现继承,子类可以覆盖或扩展父类的方法,实现功能的拓展。 3. **多态**:多态性是面向对象的另一个关键特性,它允许不同对象对同一消息做出不同的响应。Java中,多态主要通过接口...
2. **Package与Import机制**:Java中的package用于组织类,import则用于引入特定包中的类。掌握这两者的工作原理,能够帮助开发者在大型项目中有效地管理类文件,避免命名冲突。 #### 二、语法入门:从C到Java的...
理解TCP/IP协议以及HTTP协议在Java中的应用是进行网络编程的基础。 接下来是Java的框架。Spring框架是Java企业级应用的首选,它的依赖注入(DI)和面向切面编程(AOP)概念简化了代码结构。Spring Boot则进一步简化...
在Java中,我们可以创建一个`Node`类来表示树的节点,其中包含一个`value`属性以及一个`List<Node>`类型的`children`属性,用于存储子节点。 - 实现插入节点、删除节点、遍历节点(如深度优先搜索DFS和广度优先搜索...
开发人员通过编写SQL脚本,创建数据库表、定义表结构、初始化数据等。在词典运行前,将`word.sql`脚本导入MySQL数据库,可以快速完成词库的建立。在这一过程中,需要掌握SQL语言的基础知识,包括数据定义语言(DDL)...