初始化顺序

class Parent{
 private static int s=getS("父类静态成员");
 private int num=getNum();
 public Parent(){
  System.out.println("父类构造函数");
 }
 private static int getS(String string) {
  System.out.println(string);
  return 47;
 }
 public int getNum() {
  System.out.println("父类私有成员");
  return num;
 }
 public static void setS(int s) {
  Parent.s = s;
 }

 
}
class Child extends Parent{
 private int num=prt("子类私有成员");
 private static int s=getS("子类静态成员");
 public static void setS(int s) {
  Child.s = s;
 }
 public Child(){
   System.out.println("子类构造函数");
 }
 public void setNum(int num) {
  this.num = num;
 }
 private int prt(String string) {
  System.out.println(string);
  return 5;
 }
 public static int getS(String string) {
  System.out.println(string);
  return s;
 }
}


public class Test {
 
 public static void main(String args[]) throws ClassNotFoundException{
  
  //这句话可以看出一个类的初始化顺序
  //总的原则:先静态后动态,先定义初始化,后构造函数初始化
  /**
   * 实例化Child对象时
   * 先子类静态成员初始化,后父类静态成员初始化
   * 然后是父类成员,父类构造函数,最后是子类
   * 成员,子类构造函数
   *
   * 这是浙大翁恺的远程教育视频课程里讲的
   * ftp://ftp.zjuyc.com
   * 帐号: ftpuser
   * 密码: xt38kma7
   */
  Child c=new Child();
  c.setNum(100);
  
  //为什么输出的是0
  System.out.print(c.getNum());
  /*Child cStatic=new Child();
  cStatic.setS(100);
  System.out.println(cStatic.getS("s")); */   
 }
}
 

输出

父类静态成员
子类静态成员
父类私有成员
父类构造函数
子类私有成员
子类构造函数
父类私有成员
0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值