java字段初始化的顺序

写作原因

近期写java作业时,突然出现了不明的数组越界的问题,
再加上同学问我的代码里也出现了这个问题,所以想来和大家分享一下。

下面展示一段有问题的代码

public class temp1 {
	int size;
	int[] test=new int[size];
	public temp1(int asize)
	{
		this.size=asize;
	}
	public static void main(String[]args)
	{
		temp1 test1=new temp1(5);
		System.out.println("length:"+test1.test.length);
		System.out.println("size:"+test1.size);
	}
	

}//length=0,size=5

这里一开始我是在构造函数里输入size的值,size的值变成了5,
但是最后构造出来的数组大小却是零????

这里我就猜想,java实例化对象的时候,先进行了类里面声明的初始化,
而后才进行了构造器里面的初始化

验证一下

public class temp1 {
	int size=5;
	int[] test=new int[size];
	public temp1(int asize)
	{
		this.size=asize;
	}
	public static void main(String[]args)
	{
		temp1 test1=new temp1(9);
		System.out.println("length:"+test1.test.length);
		System.out.println("size:"+test1.size);
	}
	

}//length=5,size=9;
类中声明size=5,实例化的数组大小也是5,但size的值因为构造器初始化为9而变为9

由此证明了,java类里面的字段初始化的时候,先执行了类里面的声明,而后才进行构造器里面的初始化,所以在java类实例化对象的时候,记得在构造器里初始化数组的大小,防止出现我一样的以为定义了数组空间,其实数组空间是默认的0;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值