- Java对象的创建过程?参考答案1,2,3:
- 检查类是否已经被加载;
- 为对象分配内存空间;
- 为实例变量赋默认值(0或者null);(附1这段代码可证明此步早于实例变量初始化 )
- 设置对象头
- 执行内部生成的
<init>
方法进行初始化
其中第5步的具体步骤为:递归调用超类构造器----实例变量初始化(变量声明)以及调用实例代码块-----调用构造器。
实际上,如果我们对实例变量直接赋值或者使用实例代码块赋值,那么编译器会将其中的代码放到类的构造函数中去,并且这些代码会被放在对超类构造函数的调用语句之后2
Java是按照代码顺序来执行实例变量初始化和实例代码块的2,有以下代码为证:
public class InstanceVariableInitializer {
private int i = 1;
private int j = i + 1; //实例初始化
public InstanceVariableInitializer(int var){
System.out.println(i);
System.out.println(j);
this.i = var;
System.out.println(i);
System.out.println(j);
}
{ // 实例代码块
j += 3;
}
public static void main(String[] args) {
new InstanceVariableInitializer(8);
}
}/* Output:
1
5
8
5
*///:~
总的来说,类实例化的一般过程是:父类的类构造器
<clinit>()
-> 子类的类构造器<clinit>()
-> 父类的成员变量和实例代码块 -> 父类的构造函数 -> 子类的成员变量和实例代码块 -> 子类的构造函数。2
-
- 为对象分配内存的两种方式?相关知识4,5:是否栈上分配。而在堆上分配时,根据堆是否规整又可分为两种方法:1、指针碰撞(Bump the Pointer),2、空闲列表(Free List)
-
es脑裂有碰到过吗? 相关知识参考本博-----《专题三分布式系统》之《第四章 拓展进阶(二)——搜索引擎ES》 之 《4.12.5 ES高性能集群》
-
es很大数据量(上亿)聚合如何实现
-
es如何在多并发下保证一致性?相关知识:本博-----《专题五 容器化微服务》之《第三章 云原生DevOps》之《第二节 监控》 之 《3.2.3 Elasticsearch与Kibana》最后提到的wait_for_active_shards
-
es数据量特别大时,有哪些备份手段?Elasticsearch Snapshot6等
-
有没有做过实时计算?数据流量很大,怎样的架构才能支持实时查询和分析?相关知识:浅谈实时计算:Flink
附1:
public class InstanceInitializer {
private int j = getI();
private int i = 1;
public InstanceInitializer() {
i = 2;
}
private int getI() {
return i;
}
public static void main(String[] args) {
InstanceInitializer ii = new InstanceInitializer();
System.out.println(ii.j);
}
}
/* Output: 0
*/
-
知乎-----java对象的创建过程 ↩︎
-
深入理解Java对象的创建过程:类的初始化与实例化 ↩︎ ↩︎ ↩︎ ↩︎
-
java对象的创建过程 ↩︎
-
Java中的对象一定在堆上分配吗? ↩︎
-
JavaGuide—对象的创建—Step2:分配内存 ↩︎文章来源:https://www.toymoban.com/news/detail-537922.html
-
阿里云-----【最佳实践】Elasticsearch Snapshot 备份的使用方法 ↩︎文章来源地址https://www.toymoban.com/news/detail-537922.html
到了这里,关于王力面试(未完全解析)(部分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!