如果不懂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文本编辑框控件.zip
序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口.doc
插件初始化通过EasyFramework.D.Init函数,里边可以设置是否启动Log,是否显示UGUI的Log,需要用哪种样式(两种选择)。以及各个Log的颜色设置。后续还会完善,大家及时通过我获取最新版本就好
在面试准备过程中,针对某些特定知识点进行重点学习和备考 其他说明: 本资源仅供学习和面试准备使用,不用于商业用途 部分问题可能根据时代发展和技术更新会有所调整,建议读者以官方文档和最新资料为准。
可以初始化通过地址定位 到 点。 附件查找 酒店 电影院什么 可拓展 不坑爹,上半年弄个预定酒店网站的时候弄的 没什么做不出来的功能,只要别人可以做的出来,自己就一定可以做的出来,只是看你肯不肯认真弄了
单片机对多舵机控制方式的探究拓展.pdf
对于学习JAVA的初学者,强化继承这一知识点的理解,拓展这一知识点的范围。
在实现基本多叉树的基础上,个性化拓展了实现了得到某个节点的全部递归子节点,孤独子节点,第一层级子节点对应的全部递归子节点等数据的功能处理。
Java开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava...
Java高级程序设计 第5章 Java序列化机制 5.1 应用场景 5.2 相关知识5.3 实施过程 5.4 拓展知识5.5 拓展训练 5.6 课后小结5.7 课后习题 5.8 上机实训 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前...
java学习拓展 、深入学习知识图谱,JVM内存模型/垃圾回收 ,java设计模式,java集合框架等。。。。
redhat.vscode-xml ,VisualStudioExptTeam.vscodeintellicode,vscjava.vscode-java-debug ,vscjava.vscode-java-dependency ,vscjava.vscode-java-pack ,vscjava.vscode-java-test ,vscjava.vscode-maven ,vscjava....
相关知识点 (1)标识符 Java中的包名、类名、方法名、参数名、变量名等都需要用一个符号来标识,这个符号就称为标识符,java中标识符的命名规那么如下: 组成:可由大小写字母、数字、下划夜(_)和美元符号($) ...
(我一共上传了16个C#、JAVA文档,根据需求,大家可以有选择性的下载)
作为上海的Java工程师,可以参与到各类创新项目和团队中,拓展自己的职业发展空间。 随着Java技术的不断发展,Java工程师需要不断学习和跟进最新的技术趋势和框架,提升自己的技术能力,保持竞争力。 上海作为一个...
java中的类只有单继承,接口具有多继承 继承具有单根性,一个类只能有一个父类 不能继承父类的有三种情况 · 用private修饰的属性和方法 · 构造方法 · 用protected修饰的属性和方法,父类和子类不在同一包下...
行业分类-设备装置-初中天文拓展型课程中的非观测类教学活动探究.zip
请注意: 比对文件名必须在source和target中保持相同,包括拓展名,比对过程中只会比较两个图像名完全相同的图片,目前对于图片的格式没有限制,当然没有完全测试到,比对灵敏度我已经设置好,如果 您需要改变,请在...
熟悉抽象类的基本含义以及Java中的语法规则 2.熟悉接口基本含义以及实现规则 3.掌握抽象类定义方法,并能根据需要进行抽象类设计 4.掌握接口定义以及实现方法 1.抽象类的语法规则 2.接口类的定义及实现规则 3....