关于java变量的初始化问题

变量初始化会在类加载阶段完成,这个时候主要执行<clinit>方法,这个方法是类构造器,只负责静态变量赋值和静态代码块执行,而<init>方法是实例构造器,主要负责实例变量初始化和构造方法的执行。


看下面代码:

public class TestDemo3
{
    public static void main(String[] args)
	{
		Base base=new sssu();
	}
}
 class Base
{
   private String baseName = "base";
   public Base()
   {
       callName();
   }
   public void callName()
   {
       System. out. println(baseName);
   }
   
}
 class sssu extends Base
 {
     private String baseName = "sub";
     public void callName()
     {
         System. out. println (baseName) ;
     }
 }

类加载过程中,执行<clinit>方法,这时候没有静态变量和静态代码块,所以不执行,那么接下来执行<init>方法,那么,<init>方法怎么执行的,先执行父类<init>方法,初始化变量,执行构造函数,那么具体到这个类就是先执行

Base的<init>方法,Base执行object的<init>方法,为空,然后初始化变量,将baseName设置为base,执行构造方法,就是调用父类构造方法,发现执行callName(()方法,注意,这里是在子类中调用的,此时,baseName还没有被赋值,因为子类没有执行<init>方法呢,所以,为null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值