A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐兴旺 中级黑马   /  2012-3-1 00:41  /  2354 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A{
      public A(){
         this.fun();
      }
      public void fun(){
          System.out.println("!!!!");
      }
}
class B extends A{
   private int x=100;
   public B(int x){
      this.x=x;
   }
   public void fun(){
     System.out.println(this.str);
   }
}
public class SuperDemo {
    public static void main(String args[]){
       new B(20);
   }
}
因为子类的实例必须找到父类的无参构造作为出口,但是现在其父类又调用其自身的方法不能执行完就
子类就无法初始化,所以输出结果为 0 。但是在讲子类中的参数x定义为静态之后
private static int x=100;
为什么跳过父类直接执行子类的方法,这和子类实例化要先找到父类的构造方法是不是又矛盾呢?

1 个回复

倒序浏览
静态成员在内存中是单独存在的,它和对象的初始化是分别独立完成的,
对象的属性在堆内存中初始化,而静态成员在方法区中初始化,
更重要的是静态成员是随着类的加载而加载,跟对象有没有初始化无关,它一般是先于
对象的初始化完成的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马