类的初始化变量和方法的执行顺序(父子类)

执行顺序:(静态代码块和静态变量谁在前面就先执行谁)

父类静态代变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数。

 

代码示例

package com.jdk.learn;

public class ClassLoaderTest {

  public static void main(String[] args) {
    son sons=new son();
  }
}

class parent{
  private static int a=1;
  private static int b;
  private int c=initc();
  static {
    b=1;
    System.out.println("1.父类静态代码块:赋值b成功");
    System.out.println("1.父类静态代码块:a的值"+a);
  }
  int initc(){
    System.out.println("3.父类成员变量赋值:---> c的值"+c);
    this.c=12;
    System.out.println("3.父类成员变量赋值:---> c的值"+c);
    return c;
  }
  public parent(){
    System.out.println("4.父类构造方式开始执行---> a:"+a+",b:"+b);
    System.out.println("4.父类构造方式开始执行---> c:"+c);
   }
}

class son extends parent{
  private static int sa=1;
  private static int sb;
  private int sc=initc2();
  static {
    sb=1;
    System.out.println("2.子类静态代码块:赋值sb成功");
    System.out.println("2.子类静态代码块:sa的值"+sa);
  }
  int initc2(){
    System.out.println("5.子类成员变量赋值--->:sc的值"+sc);
    this.sc=12;
    return sc;
  }
  public son(){
    System.out.println("6.子类构造方式开始执行---> sa:"+sa+",sb:"+sb);
    System.out.println("6.子类构造方式开始执行---> sc:"+sc);
  }
}

 

执行结果:

1.父类静态代码块:赋值b成功
1.父类静态代码块:a的值1
2.子类静态代码块:赋值sb成功
2.子类静态代码块:sa的值1
3.父类成员变量赋值:---> c的值0
3.父类成员变量赋值:---> c的值12
4.父类构造方式开始执行---> a:1,b:1
4.父类构造方式开始执行---> c:12
5.子类成员变量赋值--->:sc的值0
6.子类构造方式开始执行---> sa:1,sb:1
6.子类构造方式开始执行---> sc:12

 

总结:

当我们进行new实例化进行操作的时候,JVM都进行了什么操作呢?
如果你看过深入理解jvm的话,应该会比较清楚,当我们使用new关键字进行实例化的时候,会进行如下几步处理:

加载
此阶段加载类的字节码信息到内存
连接
此阶段进行验证,分配默认值,符号引用转直接引用
初始化
为成员进行赋值等

使用
对实例进行操作比如sons.toString()

对于我们的实例而言,我们只关注连接和初始化阶段即可。
连接阶段我们按照类结构(成员变量(先),方法(后)等)的顺序(不是书写顺序),先对变量进行赋默认值0,对象的话为null。

初始化的时候,就是对对象进行赋值,比如c执行initc()进行赋值。

 

参考博客:https://blog.csdn.net/u014042066/article/details/77574956

转载于:https://www.cnblogs.com/gwxppg/p/11189700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值