初始化顺序

来源:互联网 发布:辐射4捏脸数据怎么用 编辑:程序博客网 时间:2024/04/26 07:13

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

原创粉丝点击