在初始化我们做的主要事情就是初始化我们的类变量和我们在程序中编写的初始化操作。上面我们在连接阶段提到的a被初始化为零值,在我们的初始化阶段我们为我们的类变量进行赋值操作。
虚拟机严格规定了有且只有四种情况必须立即对类进行初始化。
1.遇到new ,getstatic,putstatic,invokestatic这四条字节码指令时。
new就是我们所熟悉的在实例化对象的时候,getstatic,putstatic,invokestatic是什么呢?就是我们在获取和设置一个static变量(final修饰的类变量除外,final修饰的类变量,在编译期已经把结果放入常量池。)时,还有我们在调用我们类的静态方法的时候。如果类没有被初始化,必须立即对类进行初始化。
2.在我们使用反射对类进行发射调用的时候。
3.当我们初始化一个类的时候,发现其父类没有初始化,必须先对其父类进行初始化。
4.当虚拟机启动时,我们的主类会被初始化(包含main()方法的那个类)。
下面我们通过我们的代码来验证以下,类的初始化过程。
除了上面的四种情况,其他任何一种情况,都不会触发类的初始化操作。
下面我们来举个例子验证以下,我们上面所说的几种情况:
我们先定义两个类:一个Person类和Person类的子类Person类。
public class Person {
public static int a = 10;
public static final int b = 10;
static {
System.out.print(“person类被初始化了。”);
}
}
public class Child extends Person{
static {
System.out.print(“Child类被初始化了。”);
}
public static int addNum(int a ,int b){
return a+b;
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
学习分享,共勉
Android高级架构师进阶之路
题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。 点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!
- Android进阶知识体系学习脑图
- Android进阶高级工程师学习全套手册
- 对标Android阿里P7,年薪50w+学习视频
-
大厂内部Android高频面试题,以及面试经历
-
对标Android阿里P7,年薪50w+学习视频
[外链图片转存中…(img-CfSjIBPT-1710685636688)]
- 大厂内部Android高频面试题,以及面试经历