小鱼Ava 2017-12-20 06:23 采纳率: 60%
浏览 1287
已采纳

Java内存分析,加载类中包含其他类的加载顺序

已知一个Person类,包含的属性home属于Home类
public class Person {
String name;
int age;
String[] hobby;
Home home;

省略get、set方法等。。。

}

public class Demo {
public static void main(String[] args) {
Person p = new Person();
p.setAge(18);
p.setName("小鱼");
Home h = new Home();
h.setAddress("长春");
h.setArea(100);
h.setRoomNum(3);
p.setHome(h);
}
}

在执行main方法时(前台Person类和Home类之前都没有加载过),遇到Person p = new Person();加载Person类,加载Person类的时候会同时加载Home类吗,还是只有等到执行到Home h = new Home();才会加载Home类。。

  • 写回答

10条回答

  • yuyubingMan 2017-12-20 14:16
    关注

    java类加载器加载顺序:
    1、先加载父类再加载子类
    2、先加载类属性再加载实例属性
    3、同等状况下从上往下加载

    像你说的 new Person(),这是一个new表达式,表示申请一个堆区实例。为了生成该实例,首先会加载Person这个类(喊带static的部分),
    然后加载构造方法,在加载构造方法的过程中会在堆区生成实例,并初始化,从上往下初始化age、name、hobby、home 4条属性,初始化home时当然就要加载Home类。
    其实你可以启动debug模式查看加载顺序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题